数字三角形的加强版,寻找到顶部对100取模最大的,想一想如果枚举的话2^24复杂度肯定会挂,转念一想,肯定都是小于100的数,100个数枚举一下就好。。。
开始写了一个不靠谱的程序居然过了9组,也太假了,那个程序只会输出99,后9组数据全是99。。。改了改错,水过了。。。
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 int p[25][25],dp[26][26][101]; 5 int main() 6 { 7 int i,j,k,n; 8 scanf("%d",&n); 9 for(i = 1;i <= n;i ++) 10 { 11 for(j = 1;j <= i;j ++) 12 { 13 scanf("%d",&p[i][j]); 14 p[i][j] = p[i][j]%100; 15 } 16 } 17 for(i = 1;i <= n;i ++) 18 { 19 dp[n][i][p[n][i]] = 1; 20 } 21 for(i = n-1;i >= 1;i --) 22 { 23 for(j = 1;j <= i;j ++) 24 { 25 for(k = 0;k <= 99;k ++) 26 { 27 if(dp[i+1][j][k]) 28 { 29 dp[i][j][(k+p[i][j])%100] = 1; 30 } 31 if(dp[i+1][j+1][k]) 32 { 33 dp[i][j][(k+p[i][j])%100] = 1; 34 } 35 } 36 } 37 } 38 for(i = 99;i >= 0;i --) 39 { 40 if(dp[1][1][i]) 41 { 42 printf("%d\n",i); 43 break; 44 } 45 } 46 return 0; 47 }