小胖吃肉
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
众所周知,小胖非常喜欢吃肉。有一天,小胖发现了很多块肉。由于每一块肉的大小都不一样,并且每一块肉带给小胖的愉悦程度都不一样。但是因为小胖太胖了,所以小胖的妈妈规定小胖最多可以吃x体积的肉。小胖现在来求助于你,想让你找到一个最优的吃肉方式,使得小胖获得的愉悦度最高。
注:小胖可以只吃一块肉的一部分。
输入
首先输入一个整数T,代表有T组数据。
接下来的每组数据的第一行输入两个整数n,x。代表小胖发现了n块肉。小胖最多可以吃x体积的肉。
(n<=1000,x<=10000)
接下来的n行,每行输入两个整数a,b。代表这块肉的体积为a,单位体积的这块肉可以给小胖带来b的愉悦度。
(a<=1000,b<=10000)
输出
输出小胖最多可以获得的愉悦度为多少。
示例输入
1 2 3 10 1 1 3
示例输出
5
提示
小胖可以选择吃第二种肉1体积,吃第一种肉2体积,一共可以获得3+1*2=5的愉悦度
来源
示例程序
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <iostream> #include <algorithm> #include <string> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> using namespace std; struct node { int a; int b; }q[10010]; int main() { int t,n,x,i,j,k; struct node tt; while(scanf("%d",&t)!=EOF) { while(t--) { int sum=0; scanf("%d %d",&n,&x); for(i=0;i<n;i++) { scanf("%d %d",&q[i].a,&q[i].b); } for(i=0;i<n-1;i++) { for(j=0;j<n-1-i;j++) { if(q[j].b<q[j+1].b) { tt=q[j];q[j]=q[j+1];q[j+1]=tt; } } } int f=1; for(i=0;i<n;i++) { for(j=q[i].a;j>0;j--) { sum+=q[i].b; x--; if(x==0) { f=0; break; } } if(f==0) { break; } } printf("%d\n",sum); } } return 0; }