//动态规划//要处理好边界//LITTLE SHOP OF FLOWERS ------四B

题目链接:
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]);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值