标签:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2571
题面:
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
递推水题,按照给定规则递推即可,没有什么特别的难度,只需注意将初值设为-2000010即可。
代码:
#include <iostream> #include <cstdio> using namespace std; int n,m,val[21][1005],dp[21][1005]; int max(int a,int b) { return a<b?b:a; } void init() { for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) dp[i][j]=-2000010; dp[1][1]=val[1][1]; } int main() { int t; 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",&val[i][j]); init(); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { dp[i][j+1]=max(dp[i][j+1],dp[i][j]+val[i][j+1]); dp[i+1][j]=max(dp[i+1][j],dp[i][j]+val[i+1][j]); for(int k=2*j;k<=m;k+=j) { dp[i][k]=max(dp[i][k],dp[i][j]+val[i][k]); } } } printf("%d\n",dp[n][m]); } return 0; }
标签:
原文地址:http://blog.csdn.net/david_jett/article/details/51367253