这道题目的阅读让我纠结了,好久,题目不难,但是一开始我还是忘了考虑全是负值的情况。
状态转移方程
i 1 to f;
j 1 to v;
k 1 to j
dp[i][j]= max(dp[i][j],dp[i-1][k]);
初始化:除了第0行全为0 ,其余全部初始化为-inf.
#include<iostream>
#include<cstring>
#define inf 0x3f3f3f3f
using namespace std;
int dp[103][220];
int a[104][220];
int main()
{
int f,v;
while(cin>>f>>v)
{
int i,j,k;
for(i=0;i<=100;i++)
for(j=0;j<=100;j++)
dp[i][j]=-inf;
for(i=0;i<=100;i++)
dp[0][i]=0;
for(i=1;i<=f;i++)
{
for(j=1;j<=v;j++)
cin>>a[i][j];
}
for(i=1;i<=f;i++)
{
for(j=1;j<=v;j++)
{
for(k=0;k<j;k++)
dp[i][j]=max(dp[i][j],dp[i-1][k]+a[i][j]);
}
}
int maxx=-inf;
for(i=1;i<=v;i++)
if(maxx<dp[f][i])
maxx=dp[f][i];
cout<<maxx<<endl;
}
}