猛师亨利

69 篇文章 0 订阅

猛狮亨利


题目描述

自金天成在德意志各个公国树立威信后,他准备开始攻打波兰,后勤工作由萨克森和巴伐利亚两个公国负责。
而在金天成攻打波兰期间,德意志最强大的王公“饭桌猛狮亨利” ,别名“二胖” ,宣布
他才是德意志的国王!发动了叛乱。
为了食物,金天成国王表示“一定要胖揍 ”。
于是,他留了部分人在战斗前线,带领一队人马前往镇压叛乱。
这时,他发现,他能带走的粮食有限,而士兵都是有饭量的。
比如某位叫“巨胖”的军官可以使用碾压战术杀死一条线上的所有敌人(无视兵种) ,也可以当城墙使用,但是他一顿可以吃一吨。
又比如某位叫“中二现”的军官,他饭量不多,但是杀伤力没“巨胖”军官强。
这就让金天成犯难了。
因为金天成一顿也可以吃一吨……
所以,金天成希望能够在减去他的饭量后所剩下粮食数量有限的情况下, 带领的士兵杀伤力最大, 且不至于断粮而饿死沙场。
现在,他手下有 N 类可以带走的士兵或者军官,数量无限。
每类士兵或军官都有个饭量 Ai 和杀伤力 Bi ,行军时每顿饭可以提供的粮食数量为 M (不包括金天成的饭量) 。
现在请告诉金天成他能带走的杀伤力最强的部队杀伤力为多少。


输入格式

1 行两个数字 N M
2 行到第 n+1 行,第 i+1 行两个数字 Ai Bi ,表示第 i 个士兵(或军官)的饭量和杀伤力。


输出格式

输出一行,即最强部队杀伤力数值。


样例输入

4 10
2 3
3 5
4 6
5 7


样例输出

16


样例解释

2 2 号士兵(或军官)和 1 3 号士兵(或军官) 。
饭量 10,杀伤力 16


数据范围

30% 的数据: 1N10 1M20
100% 的数据: 1N10000 1M10000 1Ai10000 1Bi10000


Solution

完全背包问题


Code

#include <iostream>
#include <cstdio>

#define Max(x,y) ((x)>(y)?(x):(y))

using namespace std;

int n,m;
int w[10010],c[10010];
int f[10010];

int main(){
    freopen("lion.in","r",stdin);
    freopen("lion.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)scanf("%d%d",&w[i],&c[i]);
    for(int i=1;i<=n;i++)
        for(int j=w[i];j<=m;j++)
            f[j]=Max(f[j],f[j-w[i]]+c[i]);
    printf("%d\n",f[m]);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值