题目链接:
https://vjudge.net/contest/205708#problem/B
大致题意就是有f朵花,v个花瓶,不同的花放在不同的花瓶里会有不同的魅力值,每朵花选择的花瓶序号间的大小关系必须和花序号大小关系保持一致,在这个条件下,最大魅力值是多少。
解题思路:
dp[i][j]代表在用了i朵花j个花瓶的情况下的最大魅力值。一般情况下,dp[i][j]是max{dp[i][j-1],第i朵花放在第j个花瓶里的魅力值+dp[i-1][j-1]},也就是在旧情况和新情况中选择一种。但对于dp[i][i]这种情况要特殊考虑,第i个花瓶是第i朵花能选择的第一个花瓶,所以对它而言没有旧情况,只能是魅力值+dp[i-1][j-1]。
#include<stdio.h>
#include<memory.h>
int dp[105][105];
int main()
{
int f,v,t,i,j;
memset(dp,0,sizeof(dp));
scanf("%d%d",&f,&v);
for(i=1;i<=f;i++)
{
for(j=1;j<=v;j++)
{
scanf("%d",&t);
if(j==i)
{
dp[i][j]=t+dp[i-1][j-1];
}
if(j>i&&j<=v-f+i)
{
t+dp[i-1][j-1]>dp[i][j-1]?dp[i][j]=t+dp[i-1][j-1]:dp[i][j]=dp[i][j-1];
}
}
}
printf("%d\n",dp[f][v]);
}