怎么说呢,寒假在hdu水题的时候就没想出来,谁知道这次个人赛竟然出了。(当时为什么我没做,啊啊啊!!)
比赛的时候又重新读了一边题,发现和寒假读的题有点不一样,有一丝的尴尬。看到黑猫dalaoA掉了,自己怎么想也没想出来啊(还是自己太菜了orz)
一直到第二天上午上概率论的时候,突然一道诡异的光芒在脑中闪过,发现是个dp,和完全背包很类似(比赛的时候咋就没想出来呢)然后回宿舍敲了敲,样例都没对(气哭,自己竟然这么菜)
下面是AC代码
1 #include <cstdio> 2 #include <cstring> 3 4 int main() 5 { 6 int t; 7 scanf("%d",&t); 8 while(t--) 9 { 10 int a[30],dp[30][51]; 11 memset(dp,0,sizeof(dp)); 12 for(int i=1;i<=26;i++){ 13 scanf("%d",&a[i]); 14 } 15 for(int i=0;i<=26;i++) 16 dp[i][0]=1; 17 for(int i=1;i<=26;i++){ 18 for(int j=1;j<=50;j++){ 19 for(int k=0;k<=a[i]&&j-k*i>=0;k++){ 20 dp[i][j] += dp[i-1][j-k*i]; 21 } 22 } 23 } 24 int sum=0; 25 for(int i=1;i<=50;i++){ 26 sum += dp[26][i]; 27 } 28 printf("%d\n",sum); 29 } 30 return 0; 31 }