博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 1614 - Hell on the Markets 奇怪的股市(贪心,结论)
阅读量:5872 次
发布时间:2019-06-19

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

先证明一个结论吧,对于1≤ai≤i+1,前面ai个数一定可以凑出1~sum[i]中的任意一个数.

对于i=1显然成立,

假设对于i=k结论成立,那么对于i=k+1来说,只要证明sum[k]+i,1≤i≤ak+1可以凑出来就行了。

因为sum[k]+i≥k+1,且1≤ak+1≤k+1,所以可以先选一个ak+1,剩下的0≤sum[k]+i-ak+1≤sum[k]一定是可以由前面的数字凑出来的。

这就证明了贪心的正确性。

#include
using namespace std;const int maxn = 1e5+5;int a[maxn];int r[maxn];bool cmp(int x,int y) { return a[x] < a[y]; }int main(){ int n; while(~scanf("%d",&n)){ long long sum = 0; for(int i = 0; i < n; i++) scanf("%d",a+i),sum += a[i],r[i] = i; if(sum&1) { puts("No"); continue; } sort(r,r+n,cmp); sum >>= 1; for(int i = n-1; i >= 0; i--){ int j = r[i]; if(a[j]<=sum){ sum -= a[j]; a[j] = 1; }else { a[j] = -1; } } printf("Yes\n%d",a[0]); for(int i = 1; i < n; i++) printf(" %d",a[i]); puts(""); } return 0;}

 

转载于:https://www.cnblogs.com/jerryRey/p/4702658.html

你可能感兴趣的文章
grep 零宽断言
查看>>
被神话的大数据——从大数据(big data)到深度数据(deep data)思维转变
查看>>
修改校准申请遇到的问题
查看>>
Linux 进程中 Stop, Park, Freeze【转】
查看>>
文件缓存
查看>>
远程协助
查看>>
Scrum实施日记 - 一切从零开始
查看>>
关于存储过程实例
查看>>
配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler” 解决办法...
查看>>
AIX 7.1 install python
查看>>
PHP盛宴——经常使用函数集锦
查看>>
重写 Ext.form.field 扩展功能
查看>>
Linux下的搜索查找命令的详解(locate)
查看>>
福利丨所有AI安全的讲座里,这可能是最实用的一场
查看>>
开发完第一版前端性能监控系统后的总结(无代码)
查看>>
Python多版本情况下四种快速进入交互式命令行的操作技巧
查看>>
MySQL查询优化
查看>>
【Redis源码分析】如何在Redis中查找大key
查看>>
northropgrumman
查看>>
关于链接文件的探讨
查看>>