hdu 2391 Filthy Rich (简单dp)

其实这题很水~但是通过做这题我终于知道了cin的输入有多慢了,以前做题总感觉自己很别人的思路一样怎么就慢了那么长时间呢,现在知道了,有一部分原因是有cin,cout输入输出的原因。

这题用cin输入会超时,有scanf就ok了。

其实这题就是一个递推公式,dp[i][j]=max(dp[i-1][j],max(dp[i-1][j-1],dp[i][j-1]));

代码:

 1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<string.h>
4 int a[1002][1002];
5 int max(int x,int y)
6 {
7 return x>y?x:y;
8 }
9 int main()
10 {
11 int t,n,m,i,j,x;
12 scanf("%d",&t);
13 for(int cas=1;cas<=t;cas++)
14 {
15 scanf("%d%d",&n,&m);
16 memset(a,0,sizeof(a));
17 for(i=1;i<=n;i++)
18 {
19 for(j=1;j<=m;j++)
20 {
21 scanf("%d",&x);
22 x+=max(a[i-1][j],max(a[i][j-1],a[i-1][j-1]));
23 a[i][j]=x;
24 }
25 }
26 printf("Scenario #%d:\n%d\n\n",cas,a[n][m]);
27 }
28 return 0;
29 }

还有一个递推公式也对,而且用时更少,不知道为什么。。。。

dp[i][j]=max(dp[i-1][j],dp[i][j-1]);

代码:

 1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<string.h>
4 int a[1002][1002];
5 int max(int x,int y)
6 {
7 return x>y?x:y;
8 }
9 int main()
10 {
11 int t,n,m,i,j,x;
12 scanf("%d",&t);
13 for(int cas=1;cas<=t;cas++)
14 {
15 scanf("%d%d",&n,&m);
16 memset(a,0,sizeof(a));
17 for(i=1;i<=n;i++)
18 {
19 for(j=1;j<=m;j++)
20 {
21 scanf("%d",&x);
22 x+=max(a[i-1][j],a[i][j-1]);
23 a[i][j]=x;
24 }
25 }
26 printf("Scenario #%d:\n%d\n\n",cas,a[n][m]);
27 }
28 return 0;
29 }




原文地址:https://www.cnblogs.com/misty1/p/2283288.html