0%

笔试

笔试算法题记录

金山云

N个整数 选择三个数字求它们和为M的方案数?

第一行两个数:N M

第二行N个数

输出方案数

1
2
3
//背包问题?


郑州易盛

N个整数 求它们和为M的方案数?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import java.util.*;


public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 返回符合条件的组合个数
* @param candidates int整型一维数组
* @param target int整型
* @return int整型
*/
public int combinationSum (int[] candidates, int target) {
// write code here
//背包问题
//dp[i][j] 前i个数中,和为j的组合个数
int n=candidates.length;
int[][] dp=new int[n+1][target+1];
for(int i=0;i<n;i++){
dp[0][i]=0;
}
for(int i=1;i<=n;i++){
for(int j=0;j<=target;j++){
if(j==candidates[i-1]){
dp[i][j]=dp[i][j-candidates[i-1]]+dp[i-1][j]+1;
}else if(j>candidates[i-1]){
dp[i][j]=dp[i-1][j]+dp[i][j-candidates[i-1]];
}else{
dp[i][j]=dp[i-1][j];
}
//System.out.println("dp["+i+"]["+j+"]="+dp[i][j]);

}
}
return dp[n][target];
}
}
------------- THE END! THANKS! -------------