uva10954 - Add All
来源:互联网 发布:windows update不更新 编辑:程序博客网 时间:2024/05/02 05:05
不错的题目,
一开始的时候题意理解不清,看discuss才知道某些隐藏的题意。
就是每次从现成的数列中选取最小的两个数相加,然后把新的数也加入到数列中,并把原来的两个数删掉。
算法,既然开一个数组,新的成员很难加入,那就开两个数组,把所有的新成员加到新数组里,然后比较的时候也得把新数组里的数考虑进去。
然后经历了TLE-RE->AC
TLE是因为我用的通用算法,每次都排序。
RE是因为我在循环中忘了加限制条件,
代码如下:
#include <cstdio>#include <algorithm>using namespace std;#define INF 0x7fffffffconst int size = 5000+10;long long a[size], b[size];int main (){ int n, arear, brear, bfront; long long sum, tt; while(scanf("%d",&n)&&n) { for(int i = 0; i < n; i++) scanf("%lld",&a[i]); sort(a,a+n); b[0] = a[0]+a[1]; sum = b[0]; b[1] = INF;//important!!! arear = 2; brear = 0; bfront = 1; while(1) { if(arear<n&&a[arear]<=b[brear]) tt = a[arear++]; else tt = b[brear++]; if(arear<n&&a[arear]<=b[brear]) tt += a[arear++]; else tt += b[brear++]; b[bfront++] = tt; b[bfront] = INF;//important!!! sum+=tt; if(arear==n&&bfront-brear==1) break; } printf("%lld\n",sum); } return 0;}
- uva10954 - Add All
- uva10954 Add All
- uva10954 - Add All
- uva10954 - Add All(multiset函数)
- UVA10954 Add All (优先队列)
- Uva10954——Add All
- UVA10954 :Add All(全部相加)
- [贪心&&优先队列]uva10954 Add All
- UVa10954 Add All (优先队列)
- uva10954
- UVa10954
- UVA10954
- UVA10954
- uva10954
- uva10954
- uva10954
- UVA10954
- Add All
- 锁定表头和固定列(Fixed table head and columns)
- Qt 无边框、透明、可移动、的个性窗体案例详解
- 【原创】国庆PE总复习(三)
- C# 子窗体中调用父窗体中的方法(或多窗体之间方法调用)
- Linux配置文件介绍
- uva10954 - Add All
- 在blackberry中载入图片使其在屏幕上显示的方法以及二维图形的绘制
- poj 1738 An old Stone Game(区间dp 合并石子问题直线型)
- 我的Java开发学习之旅------>Java ClassLoader解析一(转)
- java 时间转换
- Excel VBA用户窗体常用的方法
- Customising the Pentaho User Console (PUC)
- android 调用draw(canvas) 函数自动退出
- 如何使用 epoll? 一个 C 语言实例