packagecom.js.datastructure.recursion.蓝桥.总结.动态规划;importjava.util.Arrays;importjava.util.Scanner;publicclass 健身 {publicstaticvoidmain(String[] args){Scanner scanner =newScanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();int q = scanner.nextInt();//1 ~ n 天去健身//m个健身计划int[] tian =newint[61];tian[0]=1;for(int i =1; i <61; i++){tian[i]= tian[i-1]*2;}int[] qq =newint[q];for(int i =0; i < q; i++){qq[i]= scanner.nextInt();}Arrays.sort(qq);int[] si =newint[m];int[] ki =newint[m];for(int i =0; i < m; i++){int kk = scanner.nextInt();int ss = scanner.nextInt();ki[i]= tian[kk];si[i]= ss;}//完全背包int[] dp =newint[n+1];for(int i =0; i < m; i++){for(int j = ki[i]; j <= n; j++){dp[j]=Math.max(dp[j],dp[j-ki[i]]+ si[i]);}}int ans =0;for(int i =0; i < q; i++){if(i ==0){ans += dp[qq[i]-1];}else{ans += dp[qq[i]- qq[i-1]-1];}}ans += dp[n - qq[q-1]];System.out.println(ans);}}
李白打酒加强版
packagecom.js.datastructure.recursion.蓝桥.总结.动态规划;importjava.util.Scanner;publicclass 李白打酒加强版 {publicstaticvoidmain(String[] args){Scanner scanner =newScanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();long mod =1000000007;long[][][] dp =newlong[n+2][m+2][m+2];dp[0][0][2]=1;//初始化dp[0][1][1]=1;dp[0][2][0]=1;for(int i =1; i <= n; i++){for(int j =0; j <= m; j++){for(int k =0; k < m +1; k++){if(j ==0){if(k %2==0){dp[i][j][k]= dp[i-1][j][k/2]% mod;}continue;}if(k %2==0){dp[i][j][k]=(dp[i-1][j][k/2]+ dp[i][j-1][k+1])% mod;}else{dp[i][j][k]= dp[i][j-1][k+1]% mod;}}}}System.out.println(dp[n][m-1][1]);}}