小胖吃肉
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的愉悦度
来源
示例程序
1. #include<stdio.h>
2. int main()
3. {
4. int T,n,i,m,j;
5. int a[10010],b[10010];
6. "%d",&T);
7. while(T--)
8. {
9. int t;
10. int sum = 0;
11. "%d%d",&n,&m);
12. for(i=0;i<n;i++)
13. {
14. "%d%d",&a[i],&b[i]);
15. }
16. for(i=0;i<n-1;i++)
17. {
18. for(j=0;j<n-1-i;j++)
19. {
20. if(b[j]<b[j+1])
21. {
22. t = b[j];
23. b[j] = b[j+1];
24. b[j+1] = t;
25. t = a[j];
26. a[j] = a[j+1];
27. a[j+1] = t;
28. }
29. }
30. }
31. int ff = 1;
32. for(i=0;i<n;i++)
33. {
34. for(j=a[i];j>0;j--)
35. {
36. sum = sum + b[i];
37. m--;
38. if(m == 0)
39. {
40. ff = 0;
41. break;
42. }
43. }
44. if(ff == 0)
45. {
46. break;
47. }
48. }
49. "%d\n",sum);
50. }
51. return 0;
52. }