UVA 1614 Hell on the Markets 【贪心+结论题】
来源:互联网 发布:网络销售字母缩写 编辑:程序博客网 时间:2024/06/06 19:19
题目链接
题意
给一串序列,保证序列中每个数满足
分析
先上结论
数列
an 满足∀ai∈an,ai≤i ,则对于任何正整数S≤sum[i] (sum[i]为前i项和),总能从an 中的前i项中选出某些数,使其和为S
即对于每项不大于下标的数列,总能凑出一些数,使其和为1~前缀和中的任意一个数
证明:
用数学归纳法
1) 当n=1时显然成立
2)假设当n=k时成立,即任何一个正整数S都可以表示为
3)对于n=k+1,1~sum[k]中的数有2)知显然可以凑出。而对于sum[k]+1~sum[k+1]间即
得证
代码实现也就很简单了,首先所有数的和为奇数是肯定不能一分为二的。然后先排个序,然后从后到前扫一遍能选就选,选到总和的一般为止。不用担心选了某个数以后就凑不齐了,因为有上面的那个结论,总能够凑齐的。
AC代码
//UVA 1614 Hell on the Markets//AC 2016-7-29 23:12:13//Greedy, Math Conclusion#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>#include <cctype>#include <cstdlib>#include <cstring>#include <vector>#include <set>#include <string>#include <map>#include <queue>#include <deque>#include <list>#include <sstream>#include <stack>using namespace std;#define cls(x) memset(x,0,sizeof x)#define inf(x) memset(x,0x3f,sizeof x)#define neg(x) memset(x,-1,sizeof x)#define ninf(x) memset(x,0xc0,sizeof x)#define st0(x) memset(x,false,sizeof x)#define st1(x) memset(x,true,sizeof x)#define INF 0x3f3f3f3f#define lowbit(x) x&(-x)#define bug cout<<"here"<<endl;//#define debugpair<int,int> num[100100];bool choose[100100];int n;long long sum;int main(){ #ifdef debug freopen("E:\\Documents\\code\\input.txt","r",stdin); freopen("E:\\Documents\\code\\output1.txt","w",stdout); #endif while(cin>>n) { sum=0; for(int i=0;i<n;++i) { cin>>num[i].first; num[i].second=i; sum+=num[i].first; } if(sum%2!=0) { cout<<"No"<<endl; continue; } else cout<<"Yes"<<endl; sum/=2; st0(choose); sort(num,num+n); for(int i=n-1;i>=0;--i) { if(sum-num[i].first>=0) { sum-=num[i].first; choose[num[i].second]=1; } } for(int i=0;i<n;++i) { if(i!=0) cout<<" "; if(choose[i]) cout<<1; else cout<<-1; } cout<<endl; } return 0;}
0 0
- UVA 1614 Hell on the Markets 【贪心+结论题】
- UVA 1614Hell on the Markets 结论+贪心 (2008 NE)
- UVa 1614 - Hell on the Markets(贪心)
- UVA - 1614 Hell on the Markets 贪心+推理
- UVa 1614:Hell on the Markets(贪心)
- 1614 - Hell on the Markets(贪心)
- UVa 1614 Hell on the Markets
- Uva - 1614 - Hell on the Markets
- uva 1614Hell on the Markets
- UVA 1614(p254)----Hell on the Markets
- UVA 1614 Hell On The Market(贪心&&结论)
- Hell on the Markets UVA
- 习题8-10 UVA - 1614 Hell on the Markets 奇怪的股市(贪心)
- uva 1614——UVA 1614 - Hell on the Markets
- UVa #1614 Hell on the Markets (习题8-10)
- uva 1614 Hell on the Markets(数学相关)
- UVA1614 - Hell on the Markets
- 奇怪的股市(Hell on the Markets,ACM/ICPC NEERC 2008, UVa1614)
- storm常见错误
- 66.6 设计一个雇员类 employee,存储雇员的姓名、编号和生日等信息,要求该类使用 上一题设计的日期类作为成员对象。雇员类的使用如下: //定义一个雇员,其雇员号为 10,生日为 1970 年
- 自己的Android应用中调起支付宝网页
- [2016ACM多校] HDU5764 搜索
- 6.7 编写一个程序,设计一个类 score 用于统计一个班的学生成绩,其中使用一个静 态数据成员 sumfs 存储总分和一个静态成员函数 rsumfs()返回该总分
- UVA 1614 Hell on the Markets 【贪心+结论题】
- MySQL索引背后的数据结构及算法原理
- 点击链接,显示段落。
- 图论之最短路径-昂贵的聘礼
- MYSQL简语---查询数据库并输出JSON
- 7.2 设计一个点类,其中包含一对坐标点数据成员、一个求两个点之间距离的友元函 数 dist 和显示坐标点的成员函数,并用数据进行测试。
- Redis 存储List对象
- (第16讲)哈希表的链地址法
- hadoop map-reduce倒排索引过程