本文版权归点A点C和博客园共有,欢迎转载,但必须保留此段声明,并给出原文连接,谢谢合作!!!

hdu 2391 Filthy Rich

题目大意:在一个r*c的方格中行走,只能向下和向右走,每个格子内有一定的黄金,问能得到的最大黄金数。

AC代码:

View Code
 1 #include<stdio.h>
 2 #include<string.h>
 3 int dp[1002][1002];
 4 int max(int a,int b)
 5 {
 6     if(a>b)return a;
 7     else return b;
 8 }
 9 int main()
10 {
11    int t;
12    scanf("%d",&t);
13    int w=1;
14    while(t--)
15    {
16        memset(dp,0,sizeof(dp));
17        int i,j,r,c,a;
18        scanf("%d%d",&r,&c);
19        for(i=1;i<=r;i++)
20        {
21            for(j=1;j<=c;j++)
22            {
23                scanf("%d",&a);
24                dp[i][j]=max(dp[i-1][j],dp[i][j-1])+a;
25            }
26        }
27        printf("Scenario #%d:\n",w++);
28        printf("%d\n\n",dp[r][c]);
29    }
30    return 0;
31 }

ps:虽然过了但是时间有点长。

网上的一个最快的代码:

View Code
 1 #include<iostream>
 2 using namespace std;
 3 int dp[1001][1001];
 4 inline int readdata()
 5 {
 6     int ret(0);
 7     char c;
 8     while((c=getchar())<'0'||c>'9');
 9     ret=c-'0';
10     while((c=getchar())>='0'&&c<='9')ret=ret*10+(c-'0');
11     return ret;
12 }
13 inline void pridata(int x)
14 {
15     char top[12];
16     int i(0);
17     if(x==0){putchar('0');return;}
18     while(x)
19     {
20         top[i++]=(x%10)+'0';
21         x/=10;
22     }
23     while(i--)putchar(top[i]);
24 }
25 int main()
26 {
27     int idx=0;
28     short i,j;
29     short n,m;
30     int tmp;
31     short t;
32     t=readdata();
33     while(t--)
34     {
35         n=readdata();
36         m=readdata();
37         for(i=0;i<n;++i)
38             for(j=0;j<m;++j)
39                 dp[i][j]=readdata();
40         for(i=n-1;i>=0;--i)
41             for(j=m-1;j>=0;--j)
42             {
43                 tmp=0;
44                 if(j+1<m)tmp=max(tmp,dp[i][j+1]);
45                 if(i+1<n)tmp=max(tmp,dp[i+1][j]);
46                 if(i+1<n&&j+1<m)tmp=max(tmp,dp[i+1][j+1]);
47                 dp[i][j]+=tmp;
48             }
49         printf("Scenario #");
50         pridata(++idx);
51         putchar(':');
52         putchar('\n');
53         pridata(dp[0][0]);
54         putchar('\n');
55         putchar('\n');
56     }
57     return 0;
58 }

ps:没看懂!!!!!

posted on 2012-10-25 16:56  点A点C  阅读(191)  评论(0编辑  收藏  举报

导航