您的位置:首页 > 其它

HDU 2571 命运 (入门dp)

2017-12-18 18:19 225 查看
题目链接

题意:二维矩阵,左上角为起点,右下角为终点,如果当前格子是(x,y),下一步可以是(x+1,y),(x,y+1)或者(x,y*k) ,其中k>1。问最大路径和。

题解:入门dp,注意负数即可。

#include <bits/stdc++.h>
using namespace std;
int t,n,m,dp[25][1005],data[25][1005];
int main()
{
cin>>t;
while(t--)
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>data[i][j];
//若全部初始化为0 行走过程可能会跳过负数
for(int i=1;i<=n;i++) dp[i][0]=-999999;
for(int j=1;j<=m;j++) dp[0][j]=-999999;
dp[0][1]=dp[1][0]=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
dp[i][j]=max(dp[i][j-1],dp[i-1][j]);
for(int k=1;k<j;k++)
{
if(j%k==0)
dp[i][j]=max(dp[i][j],dp[i][k]);
//注意不是j/k j/k不会遍历1
}
dp[i][j]+=data[i][j];
}
printf("%d\n",dp
[m]);
}
return 0;
}
/*
1
1 4
100 -5 -6 3
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: