Loading

字节笔试0926

第四题

是个背包问题,我把状态转移方程写错了

import java.util.Scanner;

public class Z4 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        int n = 3 + 3; // n个背包
        int m = 12 * n; // 至少放m个东西
        Long[][] dp = new Long[n+1][m+1];

        for(int i =0; i < n+1; i++) {
            for(int j=0; j<m+1; j++) {
                dp[i][j] = 0L;
            }
        }

        for(int j = 0; j <= 20; j++) {
            dp[1][j] = (long) (21 - j);
        }
        for(int i = 0; i <= n; i++) {
            dp[i][0] = 1L;
            for(int ii=0; ii<i; ii++) {
                dp[i][0] *= 21;
            }
        }

        for(int i=2; i<=n; i++) {
            for(int j=1; j<=m; j++) {
                int p = 0;
                if(j > 21){
                    p = j - 21;
                }
                for(; p <= j; p++) {
                    dp[i][j] += (dp[i-1][p] * (21-j+p)) % 202220222022L;
                }
                dp[i][j] = dp[i][j] % 202220222022L;
            }
        }

        for(int i =0; i <= n; i++){
            System.out.print("i="+i+":");
            for(int j = 0; j <= m; j++){
                System.out.print(dp[i][j]+ " ");
            }
            System.out.println();
        }

        System.out.println(dp[n][m]);

    }

}
posted @ 2021-09-26 22:16  ljs9  阅读(35)  评论(0)    收藏  举报