Tyvj 1076 数字三角形2(DP)

题目链接

数字三角形的加强版,寻找到顶部对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 }
posted @ 2012-09-06 19:10  Naix_x  阅读(373)  评论(0编辑  收藏  举报