hpu 问题 B: 魏好看买折纸
来源:互联网 发布:sql查询语句选取行 编辑:程序博客网 时间:2024/05/01 01:36
问题 B: 魏好看买折纸
时间限制: 1 Sec 内存限制: 128 MB题目描述
魏好看在折小红花的过程中,发现自己有折纸的天赋,所以决定去买更多的折纸。她发现商店有各种各样颜色的折纸,魏好看挑不出自己喜欢的种类。
为了能拥有更多颜色的折纸,所以她决定买尽量多种类的折纸。然而魏好看这次又发现自己带的钱不多,所以她想知道在能购买尽量多种类折纸的情况下她最多能买到多少张折纸。
输入
第一行输入一个整数T,代表有T(1<T<1000)组测试数据。
每组数据第一行为两个整数n(0<n<1000),x(0≤n<1000000000),分别代表商店销售的折纸种类和魏好看带的钱数。
下面有n行,第i行有两个整数q(0<a<100000),k(0≤k<100000),分别代表第i种折纸的售价和库存。
输出
每组数据输出一行,分别为魏好看买到的折纸种类和总数,两个数用空格隔开。
样例输入
32 41 42 12 31 12 11 23 4
样例输出
2 32 20 0
思路:注意读题,注意剪枝的应用,简单的贪心问题;#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct node {int a;int b;}s[1000+100];int cmp(node x,node y){if(x.a!=y.a) return x.a<y.a;else return x.b>=y.b;}int main(){int t;scanf("%d",&t);while(t--){int n,x,p1=0,p2=0,i;memset(s,0,sizeof(s));scanf("%d %d",&n,&x);for(i=0;i<n;i++){scanf("%d %d",&s[i].a,&s[i].b);}if(x==0){printf("0 0\n");continue;}sort(s,s+n,cmp);for(i=0;i<n;i++){if(s[i].b){if(x>=s[i].a) { x-=s[i].a; p1++; p2++; s[i].b-=1; } else { break; }}}for(i=0;i<n;i++){if(s[i].b){if(s[i].a*s[i].b>=x) { p2+=(x/s[i].a); break; } else { x-=(s[i].a*s[i].b); p2+=s[i].b;}}}printf("%d %d\n",p1,p2);}return 0;}
3 0
- hpu 问题 B: 魏好看买折纸
- HPUoj魏好看买折纸
- 折纸问题
- 折纸问题
- 折纸问题
- 折纸问题
- 折纸问题 。。。
- 折纸问题
- 折纸问题
- 折纸问题
- 折纸问题
- 关于折纸问题
- 折纸问题(Java)
- 折纸问题 C++实现
- 编程 折纸问题
- [编程题]折纸问题
- 其他题目---折纸问题
- 折纸问题(递归java)
- 根据图片的路径删除显示在view中的图片
- 求助!一点回返回键就退出报Static storage paths aren't available from AID_SYSTEM
- iOS afnetworking+webservice 请求数据
- Android的数据存储及数据库操作
- vtk对 camera 的操作方法如下
- hpu 问题 B: 魏好看买折纸
- [求助]iphone4上视频流播放
- HTTP协议详解
- openwrt之wrtnode学习日记day3续
- android中,如何判断一个点在一个范围内
- iOS中保证线程安全的几种方式与性能对比
- openwrt之wrtnode学习日记day4
- Oracle DUAL误删 恢复测试
- 2016 充实的一年