hdu 2751 命运

/* Name: hdu 2751 命运 Author:UnimenSun Date: 30/06/11 21:54 Description:简单DP */ /* 解题报告:简单DP 转移方程: dp[i][j] = max(dp[i-1][j], dp[i][j-1], dp[i][k]) + array[i][j] k的条件:1<=k<j && j%k==0 其中dp[i][j]表示到i, j位置的最大值 */ #include <iostream> #include <cstring> #include <algorithm> using namespace std; int c; int n, m; int dp[25][1010]; int main() { int i, j, k; int nTemp; while(cin>>c) { while(c--) { cin>>n>>m; //初始化 for(i=0; i<=n; ++i) for(j=0; j<=m; ++j) dp[i][j] = -9999999; dp[1][0] = dp[0][1] = 0; for(i=1; i<=n; ++i) for(j=1; j<=m; ++j) cin>>dp[i][j]; for(i=1; i<=n; ++i) for(j=1; j<=m; ++j) { nTemp = dp[i-1][j]; nTemp = max(nTemp, dp[i][j-1]); for(k=1; k<j; ++k) { if(j%k == 0) nTemp = max(nTemp, dp[i][k]); } dp[i][j] = nTemp + dp[i][j]; } cout<<dp[n][m]<<endl; } } return 0; }

你可能感兴趣的:(Date)