HDU 2571 命运 (入门dp)

题目链接

题意:二维矩阵,左上角为起点,右下角为终点,如果当前格子是(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[][],data[][];
int main()
{
cin>>t;
while(t--)
{
cin>>n>>m;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
cin>>data[i][j];
//若全部初始化为0 行走过程可能会跳过负数
for(int i=;i<=n;i++) dp[i][]=-;
for(int j=;j<=m;j++) dp[][j]=-;
dp[][]=dp[][]=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
dp[i][j]=max(dp[i][j-],dp[i-][j]);
for(int k=;k<j;k++)
{
if(j%k==)
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[n][m]);
}
return ;
}
/*
1
1 4
100 -5 -6 3
*/
上一篇:专题复习--背包问题+例题(HDU 2602 、POJ 2063、 POJ 1787、 UVA 674 、UVA 147)


下一篇:浅谈JavaScript的apply和call语句