贝壳笔试0907
想看看大佬们第三第四的解题过程,3-0%,4-50%
第三题感觉动态写的对,不知道为什么是0%,或者看看我的代码哪里有问题嘛?
#笔试题目##贝壳找房#import java.util.Scanner;
/*
例如输入,5个板,3种颜色,限制为1,即1后面不能是1,2后面不能是2,3后面不能是3
5 3 1
1
2
3
dp[i][j]含义为,当板数为i时,涂到该板的颜色为j
dp[][]数组为
0 0 0 0
1 1 1 1
0 2 2 2
0 4 4 4
0 8 8 8
0 16 16 16
计算最后一排总数即48种情况
48
*/
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int loop = input.nextInt();
for (int i = 0;i<loop;i++){
int board = input.nextInt();
int color = input.nextInt();
int limit = input.nextInt();
// 不可用颜色limitmap
int[][] limitmap = new int[color+1][limit];
for (int k=1;k<color+1;k++){
for (int j=0;j<limit;j++){
limitmap[k][j] = input.nextInt();
}
}
int[][] dp = new int[board+1][color+1];
for (int k=0;k<color+1;k++){
dp[1][k] = 1;
}
for (int j = 1;j<board;j++){
for (int k = 1;k<color+1;k++){
for (int x = 1;x<color+1;x++){
if (nofind(k,x,limitmap,limit)){
dp[j+1][x] += dp[j][k];
}
}
}
}
// 计算dp最后一排的总和
long sum =0;
for (int j = 1;j<color+1;j++){
sum +=dp[board][j];
}
System.out.println(sum%1000000007);
}
}
// 查看前一种颜色为before时,after是否在limitmap中
public static boolean nofind(int before,int after, int[][] limitmap,int limit){
for (int i = 0;i<limit;i++){
if (limitmap[before][i] == after){
// System.out.println(before+"-"+after+"-f");
return false;
}
}
// System.out.println(before+"-"+after+"-t");
return true;
}
}
查看11道真题和解析