计蒜客——西邮J题

J-流浪西邮之寻找火石碎片
Description
众所周知,由于木星引力的影响,世界各地的推进发动机都需要进行重启。现在你接到紧急任务,要去收集火石碎片,重启西邮发动机。现在火石碎片已成为了稀缺资源,获得火石碎片需要钱或者需要一定的积分。火石碎片有大有小,越大的碎片能量越大,火石碎片的能量越大,重启的发动机的推力也就越强。但是,不只有我们在努力呀,隔壁的师大和政法也都在收集碎片,争取重启师大发动机和政法发动机,哪个高校重启的发动机推力最大,就能代表长安区大学城为世界做出贡献,从而在史书上留下浓墨重彩的一笔。
现在你有v1块钱,v2积分,能免费(免积分)收集k个火石碎片,现在总共有n个火石碎片,每个碎片需要的钱a或者积分b,碎片的能量为val。我们希望收集火石碎片,使能量的总和尽可能大,问你skyer_hxx最多可以拿到能量总和的最大值是多少?

Input
输入包含多组测试用例。
每组数据的第一行是四个整数n,v1,v2,k;
然后是n行,每行三个整数a,b,val,分别表示每个碎片的价钱,兑换所需积分,所含能量。
1 ≤ n ≤ 100
0 ≤ v1,v2 ≤ 100
0 ≤ k ≤ 55
0 ≤ a,b,val ≤ 100

Output
对于每组数据,输出能得到的最大能量值。

Sample Input
4 5 2 1
2 2 4
4 5 1
4 2 4
2 2 5
Sample Output
14

Hint
只要钱或者积分满足购买一个碎片的要求,那么就可以买下这个碎片。

ps: 经典背包问题的变式,维数稍高一点(三维或四维,三维的话要倒序)
f[i][j][k]表示用i元钱,j个积分,免费拿k个碎片,能达到的能力最大值
对于每个物品,我们可以有3个选择:
免费拿、用钱买、用积分买
四层循环,判断三种选择,更新最大值即可

#include <bits/stdc++.h>
using namespace std;
#define LL long long
const int maxn=105;
const int INF=0x3f3f3f;
int dp[maxn][maxn][55];
int a[maxn],b[maxn],val[maxn];
int main()
{
    int v1,v2,k,n;
    while (scanf("%d %d %d %d",&n,&v1,&v2,&k)!=EOF)
    {
        memset(dp,0,sizeof(dp));
        for (int i=1; i<=n; i++)
            scanf("%d %d %d",&a[i],&b[i],&val[i]);

        for (int i=1; i<=n; i++)
        {
            for (int j=v1; j>=0; j--)
                for (int y=v2; y>=0; y--)
                    for (int z=k; z>=0; z--)
                    {
                        int temp=0;
                        if (z>=1)
                            temp=max(temp,dp[j][y][z-1]+val[i]);
                        if (y>=b[i])
                            temp=max(temp,dp[j][y-b[i]][z]+val[i]);
                        if(j>=a[i])
                            temp=max(temp,dp[j-a[i]][y][z]+val[i]);

						dp[j][y][z]=max(dp[j][y][z],temp);
                    }
        }
        printf("%d\n",dp[v1][v2][k]);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值