就是简单dp....第一个自己敲了敲1A的dp,纪念一下;
由于确实简单,不赘述,把第一行状态列在纸上,第二行思考一下,状态转移方程就出来了;
注意一下每个花的插得花瓶范围即可,
AC代码
#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>
using namespace std;
int dp[110][110],a[110][110];
const int inf=0x3f3f3f3f;
int main()
{
int n,m;
cin>>n>>m;
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
scanf("%d",&a[i][j]);
memset(dp,-inf,sizeof(dp));
for (int i=1;i<=n;i++)
{
int re=n-i;
int st=i,en=m-re;
for (int j=1;j<=m;j++)
{
if (i==1)
dp[i][j]=max(a[i][j],dp[i][j-1]);
else
{
if (j>=st&&j<=en&&dp[i-1][j-1]!=-inf)
dp[i][j]=max(dp[i-1][j-1]+a[i][j],dp[i][j-1]);
}
}
}
cout<<dp[n][m]<<endl;
return 0;
}