这个题就是求每行选出一个数,要求选出的数列数递增,求能够选出的最大和,
算是比较简单的DP吧,一行一行的更新选即可,注意第i行应该从i列开始更新
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=111;
const int inf=1<<28;
int n,m,a[maxn][maxn],dp[maxn][maxn];
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
scanf("%d",&a[i][j]);
for(int i=1;i<n;i++)
for(int j=i;j<m;j++)
{
int ita=-inf;
for(int k=0;k<j;k++)
ita=max(ita,a[i-1][k]);
a[i][j]+=ita;
}
int ans=-inf;
for(int i=n-1;i<m;i++)
ans=max(ans,a[n-1][i]);
printf("%d\n",ans);
}
return 0;
}