hdu2573--命运 ( dp)

数据有点水了,n*m*m的代码都过

View Code
 1 //Accepted    2571    31MS    292K    1458 B    G++
 2 #include <stdio.h>
 3 #include <string.h>
 4 #define inf 0x7fffffff
 5 int n,m,dp[21][1001];
 6 inline int max(int a,int b) { return a > b ? a : b ; }
 7 void solve()
 8 {
 9      for(int i = 1; i <= n; ++i)
10            for(int j = 1; j <= m; ++j)
11            {
12                    if(i==1 && j==1)
13                            continue;
14                    else
15                    {
16                        int maxx = -inf;
17                        if( i - 1 > 0)
18                        {
19                            maxx = max(maxx,dp[i-1][j] + dp[i][j]);
20                        }
21                        if( j - 1 > 0)
22                        {
23                            for(int k = 1; k < j; ++k)
24                            {
25                                    if(j % k == 0 || k + 1 == j)
26                                    {
27                                         maxx = max(maxx,dp[i][k] + dp[i][j]);
28                                    }
29                            }
30                        }
31                        dp[i][j] = maxx;
32                    }
33            }     
34 }          
35 
36 int main(void)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
37 {
38     int c;
39     scanf("%d",&c);
40     while(c--)
41     {
42               scanf("%d%d",&n,&m);
43               for(int i = 1; i <= n; ++i)
44                       for(int j = 1; j <= m; ++j)
45                               scanf("%d",&dp[i][j]);
46               solve();              
47               printf("%d\n",dp[n][m]);
48     }
49     return 0;    
50 }
posted @ 2012-09-18 18:56  Wheat″  阅读(114)  评论(0)    收藏  举报