标签:des style blog class c code
题目:
1 3 8 9 10 10 10 10 -10 10 10 10 -11 -1 0 2 11 10 -20 -11 -11 10 11 2 10 -10 -10
52
主要是考虑在第1行第1 列的情况,所以要仔细判断。。。
这部分注意代码为:
if(i==1&&j==1) continue; if(i==1&&j!=1) dp[i][j]=dp[i][j-1]; if(j==1&&i!=1) dp[i][j]=dp[i-1][j]; if(i!=1&&j!=1) dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int map[25][1005],dp[25][1005]; int main() { int t,n,m,i,j,k; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(i=1;i<=n;i++) for(j=1;j<=m;j++) scanf("%d",&map[i][j]); memset(dp,0,sizeof(dp)); dp[1][1]=map[1][1]; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { if(i==1&&j==1) continue; if(i==1&&j!=1) dp[i][j]=dp[i][j-1]; if(j==1&&i!=1) dp[i][j]=dp[i-1][j]; if(i!=1&&j!=1) dp[i][j]=max(dp[i-1][j],dp[i][j-1]); for(k=2;k<=m;k++) { if((double)j/k==j/k) dp[i][j]=max(dp[i][j],dp[i][j/k]); } dp[i][j]+=map[i][j]; } } printf("%d\n",dp[n][m]); } return 0; }
标签:des style blog class c code
原文地址:http://blog.csdn.net/u014303647/article/details/26293571