简单的动态规划
#include<cstdio> #include<cstring> #define Max(a,b) (a>b?a:b) int dp[21][1001]; int map[21][1001]; int main() { int t; scanf("%d",&t); while(t--) { int m,n; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { scanf("%d",&map[i][j]); dp[i][j]=-101; } dp[1][1]=map[1][1]; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { if(i==1&&j==1) continue; else if(i==1&&j>1) { dp[i][j]=dp[i][j-1]; for(int k=1;k<=m;k++) if(j%k==0) dp[i][j]=Max(dp[i][k],dp[i][j]); dp[i][j]+=map[i][j]; } else if(i>1&&j==1) dp[i][j]=dp[i-1][j]+map[i][j]; else { dp[i][j]=Max(dp[i-1][j],Max(dp[i][j],dp[i][j-1])); for(int k=1;k<=m;k++) if(j%k==0) dp[i][j]=Max(dp[i][k],dp[i][j]); dp[i][j]+=map[i][j]; } } printf("%d\n",dp[n][m]); } }
时间: 2024-12-15 09:29:28