hdu 2571 命运
//31MS 312K 873 B C++ //二维DP,状态转移小变化 #include<stdio.h> #include<string.h> int dp[25][1005]; inline int max(int a,int b) { return a>b?a:b; } int main(void) { int t,n,m; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&dp[i][j]); for(int i=1;i<=n;i++){ int temp; for(int j=1;j<=m;j++){ if(i==1 && j==1) continue; if(i==1) temp=dp[i][j-1]; else if(j==1) temp=dp[i-1][j]; else temp=max(dp[i][j-1],dp[i-1][j]); for(int k=1;k<=j/2;k++) if(j%k==0) temp=max(temp,dp[i][k]); dp[i][j]+=temp; } } printf("%d\n",dp[n][m]); } return 0; }