博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51nod 1351 吃点心(贪心)
阅读量:4839 次
发布时间:2019-06-11

本文共 1615 字,大约阅读时间需要 5 分钟。

题意:

 

思路:

要么先选low值大的,要么先选high值大的,分两种情况讨论。

每次只要选了的low值和>=x或者c-未选的high值和>=x就肯定满足了。

1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 const int maxn = 50+5; 8 9 int n,c,x,lowtot,hightot;10 11 struct node12 {13 int low,high;14 bool operator< (const node& rhs) const15 {16 return low > rhs.low;17 }18 }a[maxn];19 20 bool cmp(node a, node b)21 {22 return a.high>b.high;23 }24 25 int main()26 {27 //freopen("in.txt","r",stdin);28 int T;29 scanf("%d",&T);30 while(T--)31 {32 lowtot = hightot = 0;33 scanf("%d%d%d",&n,&c,&x);34 for(int i=1;i<=n;i++)35 {36 scanf("%d%d",&a[i].low,&a[i].high);37 lowtot += a[i].low;38 hightot += a[i].high;39 }40 int sum = 0;41 int ans = 0;42 sort(a+1,a+n+1);43 int tmp = hightot;44 for(int i=1;i<=n;i++)45 {46 sum += a[i].low;47 ans++;48 hightot -= a[i].high;49 if(sum>=x || c-hightot>=x) break;50 }51 52 sum = 0;53 int ans2 = 0;54 sort(a+1,a+n+1,cmp);55 hightot = tmp;56 for(int i=1;i<=n;i++)57 {58 sum += a[i].low;59 ans2++;60 hightot -= a[i].high;61 if(sum>=x || c-hightot>=x) break;62 }63 printf("%d\n",min(ans,ans2));64 }65 return 0;66 }

 

转载于:https://www.cnblogs.com/zyb993963526/p/8039974.html

你可能感兴趣的文章
蓝牙 简书
查看>>
SQL Server系统表sysobjects介绍与使用
查看>>
【转】C/C++除法实现方式及负数取模详解
查看>>
传输层协议
查看>>
Struts2 拦截器处理普通Http请求和Ajax请求时拦截配置
查看>>
例题---
查看>>
平安度过2012,新的一年新的希望
查看>>
MySQL prompt命令
查看>>
hbase读取文件
查看>>
2周《机电传动控制》学习笔记
查看>>
DS博客作业06--图
查看>>
安装--->Tomcat监控工具Probe
查看>>
Java网络编程(URL&URLConnection)
查看>>
Java NIO学习笔记---I/O与NIO概述
查看>>
java接口中的成员方法和成员变量
查看>>
java中构造函数的特点
查看>>
Qt5:窗口背景色的设置
查看>>
NFC初步接触
查看>>
Puppet常识梳理
查看>>
iframe内联网页的应用
查看>>