因为要保持花束顺序,即求矩阵(m*n)种找出不同行不同列种m个数字的最大值。
后一行(选中的)数在的列必须大于该行(选中的)数所在的列。
dp[i][j]=max(dp[i][j-1],dp[i-1][j-1]+v[i][j])
#include <iostream>
#include <fstream>
using namespace std;
int n,m;
int w[101][101];
int dp[101][101];
void read(){
int i,j,k;
cin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
cin>>w[i][j];
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
dp[i][j]=dp[i-1][j-1]+w[i][j];
if(j>i) dp[i][j]=max(dp[i][j],dp[i][j-1]);
}
cout<<dp[n][m]<<endl;
}
int main(){
read();
return 0;
}