二话没说上去搜索 , 果不其然 华丽超时 .
1 #include<stdio.h>
2 #include<string.h>
3 #include<math.h>
4 #include<iostream>
5 #include<algorithm>
6 #include<queue>
7 #include<vector>
8 #include<set>
9 #include<stack>
10 #include<string>
11 #include<sstream>
12 #include<map>
13 #include<cctype>
14 #include<limits.h>
15 using namespace std;
16 int a[22][22],result,n,m;
17 void DFS(int y,int x,int step)
18 {
19 if(y<0||y>n||x<0||x>m)
20 return;
21 if(y==n&&x==m&&step>result)
22 result=step;
23 DFS(y+1,x,step+a[y+1][x]);
24 DFS(y,x+1,step+a[y][x+1]);
25 }
26 int main()
27 {
28 while(scanf("%d%d",&n,&m)!=EOF)
29 {
30 for(int i=0;i<n;i++)
31 for(int j=0;j<m;j++)
32 scanf("%d",&a[i][j]);
33 result=INT_MIN;
34 DFS(0,0,a[0][0]);
35 printf("%d
",result);
36 }
37 return 0;
38 }
还是用DP吧 . 只用了 4ms ...
1 #include<stdio.h>
2 #include<string.h>
3 #include<math.h>
4 #include<iostream>
5 #include<algorithm>
6 #include<queue>
7 #include<vector>
8 #include<set>
9 #include<stack>
10 #include<string>
11 #include<sstream>
12 #include<map>
13 #include<cctype>
14 #include<limits.h>
15 using namespace std;
16 int dp[22][22],result,n,m;
17 int main()
18 {
19 while(scanf("%d%d",&n,&m)!=EOF)
20 {
21 for(int i=1;i<=n;i++)
22 for(int j=1;j<=m;j++)
23 scanf("%d",&dp[i][j]);
24 for(int i=1;i<=n;i++)
25 for(int j=1;j<=m;j++)
26 dp[i][j]=dp[i][j]+max(dp[i][j-1],dp[i-1][j]);
27 printf("%d
",dp[n][m]);
28 }
29 return 0;
30 }