您的位置:首页 > 编程语言 > C语言/C++

SXY逛公园

2016-07-13 21:29 232 查看


题目描述

SXY 从恐怖怪屋出来以后,决定不再上BH指挥官的当,谁知道你又会让我玩什么恐怖游戏,
先我让我一个人静静,于是 SXY 决定到旁边
的小树林里散散步......
其实老师本来想让他去玩海盗船了,既然
SXY 不去了,老师就一个人去玩了,SXY 一
个人来到了小树林,忽然,一只大熊跑出来把
SXY 抓住了,SXY 想:我怎么这么倒霉?算
了,既然被他抓了,就任凭熊大处理了,于是
SXY 闭上眼任凭熊大处理,熊大说:嘿嘿,
SXY,你既然被我抓住了,就跟我回森林去守
护森林去,防止光头强再来偷树,SXY 想起还要回去做作业,就说:我不想去,我给你棒
棒糖好不?放了我。熊大当然不喜欢棒棒糖了,因为这东西伤牙齿,于是熊大就对 SXY 提
出了一个问题,如果 SXY 帮他解决了,就放了他,熊大的问题是这样的:

熊大在珠宝店闲逛时,买到了一个中意的手镯。很自然地,它想从它在森林里收集的
N(1 <= N <= 100)块宝石中选出最好的那些镶在手镯上。 对于第 i 块宝石, 它的重量为 Wi(1
<= Wi <= 100),并且熊大知道它在镶上手镯后能为自己增加的魅力值 Di(1 <= Di <=
100)。由于熊大只能忍受重量不超过 M(1 <= M <= 10000)的手镯,她可能无法把所有喜欢
的宝石都镶上。熊大告诉了 SXY 它所有宝石的属性以及它能忍受的重量,希望你能帮她计
算一下,按照最合理的方案镶嵌宝石的话,它的魅力值最多能增加多少。


输入

第 1 行 3 个用空格隔开的整数:N , M ,K (K 表示镯子的本来重量)
第 2..N+1 行: 第 i+1 行为 2 个用空格隔开的整数:Wi、Di,
分别为第 i 块宝石的重量与能为熊大增加的魅力值


输出

一个数字,表示熊大最多能增加多少魅力。


样例输入

4 6 01 42 63 122 7


样例输出

23


提示

对于 30%的数据:1<N<=10,K<M<=100;

对于 100%的数据:1<N<=100,K<M<=10000;

#include<stdio.h>
#include<string.h>
int f[10010],w[10010],v[10010];
int max(int x,int y){
if(x>y) return x;
else return y;
}
int main(){
int t,m,i,j,k;
scanf("%d %d %d",&m,&t,&k);
t-=k;
for(i=1;i<=m;i++)
scanf("%d %d",&w[i],&v[i]);
for(i=1;i<=m;i++){
for(j=t;j>=w[i];j--){
if(w[i]<=t)
f[j]=max(f[j-w[i]]+v[i],f[j]);
}
}
printf("%d",f[t]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 C++