猛师亨利

来源:互联网 发布:机械联结烙印矩阵多贵 编辑:程序博客网 时间:2024/04/27 15:36

猛狮亨利


题目描述

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


输入格式

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


输出格式

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


样例输入

4 10
2 3
3 5
4 6
5 7


样例输出

16


样例解释

22 号士兵(或军官)和 13 号士兵(或军官) 。
饭量 10,杀伤力 16


数据范围

30% 的数据:1N101M20
100% 的数据:1N100001M100001Ai100001Bi10000


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;}
1 0
原创粉丝点击