阿里巴巴笔试 3.17
第一题
t组数据
n副牌 每副m张 求每一组选一张,使得和为k,有多少种情况?
第二题---这个代码过70%
n个零件 m个冲突
每一个零件有对应的时间空间优化a[i],b[i]
m个冲突关系,使得零件之间不能一起选
求,每个零件和其他所有零件组合的开销的总最小值。
5 3
-1 3
2 4
1 1
3 5
2 2
1 4
2 3
3 5
4 14 4 16 10
-1 3
2 4
1 1
3 5
2 2
1 4
2 3
3 5
4 14 4 16 10
/ 本题为考试单行多行输入输出规范示例,无需提交,不计分。
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
// static int ans = 0;
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int T = cin.nextInt();
List<Integer> res = new ArrayList<>();
for(int i=0;i<T;i++){
int n = cin.nextInt();
int m = cin.nextInt();
int k = cin.nextInt();
// get_ans(n, m, k);
res.add(get_ans(n, m, k));
}
for (int i=0;i<T;i++){
System.out.println(res.get(i));
}
}
public static int get_ans(int n, int m, int k){
int res = 0;
long [][]dp = new long[n+1][k+1];
for(int j=1;j<=m && j<=k;j++){
dp[1][j] = 1;
// System.out.println(1 + " " + j + " " + dp[1][j]);
}
for(int i=2;i<=n;i++){
for(int j=i;j<=k;j++){
for(int c = 1;c<=m;c++){
if(j - c < 1)
break;
dp[i][j] += dp[i-1][j-c];
// System.out.println(i + " " + j + " " + dp[i][j]);
}
}
}
return (int)(dp[n][k] % 1000000007);
}
// 本题为考试单行多行输入输出规范示例,无需提交,不计分。
import java.util.*;
public class Main {
// static int ans = 0;
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
int m = cin.nextInt();
List<Integer> lint = new ArrayList<>();
int []a = new int[n+1];
int []b = new int[n+1];
for(int i=1;i<=n;i++){
a[i] = cin.nextInt();
b[i] = cin.nextInt();
}
char [][]relation = new char[n+1][n+1];
for (int i=0;i<m;i++){
int x = cin.nextInt();
int y = cin.nextInt();
relation[x][y] = '1';
relation[y][x] = '1';
}
int res;
for(int i=1;i<=n;i++){
res = 0;
for(int j=1;j<=n;j++){
if (i == j || relation[i][j] == '1')
continue;
res += Math.min(a[i]+b[j], a[j] + b[i]);
}
lint.add(res);
}
for (int i=0;i<lint.size();i++){
System.out.print(lint.get(i) + " ");
}
}
}

查看10道真题和解析