所谓的花瓶问题。。。
经典dp问题。。
然而我又是骚气的想出了一种骚气的dp方程
dp[i][j]=max(dp[i-1][k]+f[i][j])//注意k要从i-1开始枚举!!!
这样dp方程的好处就是有一种很骚气的输出写法,这个写法的灵感也是借鉴了Poj有个lcs的问题而想到的,上代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
using namespace std;
int dp[210][210],f[210][210],n,m;
void dfs(int x,int y,int w)
{
if (x==0) return;
while (dp[x][y]!=w) y--;
dfs(x-1,y-1,w-f[x][y]);
printf("%d ",y);
}
int main()
{
memset(dp,-127,sizeof(dp));
scanf("%d%d",&n,&m);
dp[0][0]=0;
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
{
scanf("%d",&f[i][j]);
for (int k=i-1;k<j;k++)
dp[i][j]=max(dp[i-1][k]+f[i][j],dp[i][j]);
}
int maxf=-1231231231;
for (int j=1;j<=m;j++)
maxf=max(maxf,dp[n][j]);
printf("%d\n",maxf);
dfs(n,m,maxf);
return 0;
}
dfs部分干练而骚气~