HDU:4104 Discount
2013-09-25 08:18
405 查看
题意:问你一组数字中选几个数字相加不能得到最小的数字是多少。
思路:首先将n个数字升序排序,将前i个数字相加得到和为sum,如果第i+1个数大于sum(1--i)+1,那么必不能得到sum(1-i)+1,所以sum(1--i)+1就是答案;如果将所有数字都相加也没有出现刚才的情况,那么答案就是sum(1--n)+1.
虽然网上都说这个题很水,我觉得是因为杭电数据太弱了以至于直接输出sum(1--n)+1都能AC。
尽管如此我也不能保证我说的这个算法的正确性,毕竟算法是从网上找来的,虽然我没有找到反例。
思路:首先将n个数字升序排序,将前i个数字相加得到和为sum,如果第i+1个数大于sum(1--i)+1,那么必不能得到sum(1-i)+1,所以sum(1--i)+1就是答案;如果将所有数字都相加也没有出现刚才的情况,那么答案就是sum(1--n)+1.
虽然网上都说这个题很水,我觉得是因为杭电数据太弱了以至于直接输出sum(1--n)+1都能AC。
尽管如此我也不能保证我说的这个算法的正确性,毕竟算法是从网上找来的,虽然我没有找到反例。
#include <cstdio> #include <cstring> #include <iostream> #include <cmath> #include <algorithm> using namespace std; int main() { int n, a[1005]; while(scanf("%d",&n) != EOF) { int sum=0; for(int i=0; i<n; ++i) scanf("%d",&a[i]); sort(a,a+n); for(int i=0; i<n; ++i) { if(a[i]>sum+1) break; else sum+=a[i]; } printf("%d\n",sum+1); } return 0; }
相关文章推荐
- windows 无法启动SQL Server FullText Search(MSSQLSERVER)服务
- Linux下ps命令详解
- centos安装mongodb
- Xcode4快速Doxygen文档注释 — 简明图文教程
- HDU 4534 郑厂长系列故事——新闻净化(AC自动机 + DP)
- UNIX环境高级编程--标准I/O库(二)
- 北大主食限购一种最多3个 难挡“抢粮”大军
- c 语言输出1000以内的逆序数
- asp.net 在webconfig里自定义错误页
- 如何解决IIS7上传文件大小限制【转】
- centos 安装 python
- DEDE模板中如何运行php脚本和php变量的使用
- Portable Executable
- DEDE模板中如何运行php脚本和php变量的使用
- 静态构造函数【转】
- 我们用sort asort 对数组排序时 中文如何按拼音排序的问题
- java学习笔记
- openssl生成https证书
- 开源 免费 java CMS - FreeCMS-1.5 站内信
- 文件内存序列化和反序列化