想看看大佬们第三第四的解题过程,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; } }
全部评论
(1) 回帖