大家帮我看一下

下面两段代码有什么区别么,为甚么得到的答案不一样

import java.util.Arrays;
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[] v = new int[n];
for (int i = 0; i < n; i++) {
v[i] = sc.nextInt();
}
long[] dp = new long[m + 1];
dp[0] = 1;
for (int i = 0; i < n; i++) {
for (int j = m; j >= 0; j--) {
if (j >= v[i]) {
dp[j] += dp[j - v[i]];
}
}
}
System.out.println(dp[m]);
}
}


import java.util.Arrays;
import java.util.Scanner;

/***
*
* @author Mr Zhang 题目描述 给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数。
*         当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案。 输入描述: 输入为两行: 第一行为两个正整数n(1 ≤ n ≤
*         1000),sum(1 ≤ sum ≤ 1000) 第二行为n个正整数A[i](32位整数),以空格隔开。 输出描述: 输出所求的方案数
*         示例1 输入
*
*         5 15 5 5 10 2 3 输出
*
*         4
*
*/

public class SumTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[] v = new int[n];
for (int i = 0; i < n; i++) {
v[i] = sc.nextInt();
}
long[] dp = new long[m + 1];
dp[0] = 1;
for (int i = 1; i <= m; i++) {
for (int j = 0; j < v.length; j++) {
if (i >= v[j]) {
dp[i] += dp[i - v[j]];
}
}
}
System.out.println(dp[m]);
}
}



全部评论

相关推荐

03-27 17:35
门头沟学院 C++
点赞 评论 收藏
分享
02-23 12:32
已编辑
门头沟学院 嵌入式工程师
King987:学历没有问题,然后既然有实习经历的话,把这个放在上面多写一点,哪怕你自己包装一下,只要能圆回来就行,既然有实习经历的话,肯定主要看实习经历之类的。然后也会主要问这里多准备准备
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务