Codeforces Round #334 (Div. 2)
2016-01-01 23:59
387 查看
B. More Cowbell
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Kevin Sun wants to move his precious collection of n cowbells from Naperthrill to Exeter, where there is actually grass
instead of corn. Before moving, he must pack his cowbells into kboxes of a fixed size. In order to keep his collection safe during transportation, he
won't place more than two cowbells into a single box. Since Kevin wishes to minimize expenses, he is curious about the smallest size box he can use to pack his entire collection.
Kevin is a meticulous cowbell collector and knows that the size of his i-th (1 ≤ i ≤ n)
cowbell is an integer si.
In fact, he keeps his cowbells sorted by size, so si - 1 ≤ si for
any i > 1. Also an expert packer, Kevin can fit one or two cowbells into a box of size s if
and only if the sum of their sizes does not exceed s. Given this information, help Kevin determine the smallest s for
which it is possible to put all of his cowbells into k boxes of size s.
Input
The first line of the input contains two space-separated integers n and k(1 ≤ n ≤ 2·k ≤ 100 000),
denoting the number of cowbells and the number of boxes, respectively.
The next line contains n space-separated integers s1, s2, ..., sn(1 ≤ s1 ≤ s2 ≤ ... ≤ sn ≤ 1 000 000),
the sizes of Kevin's cowbells. It is guaranteed that the sizes si are
given in non-decreasing order.
Output
Print a single integer, the smallest s for which it is possible for Kevin to put all of his cowbells into k boxes
of size s.
Sample test(s)
input
output
input
output
input
output
Note
In the first sample, Kevin must pack his two cowbells into the same box.
In the second sample, Kevin can pack together the following sets of cowbells: {2, 3}, {5}and {9}.
In the third sample, the optimal solution is {3, 5} and {7}.
错因:没有仔细分析题意,一直以为是分组背包问题,,自己把自己吓到了
解答:贪心问题,先将几个最大的物体一个一个的放入背包中,然后再将小物体加入已有大物体的背包中,要倒序(贪心)
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Kevin Sun wants to move his precious collection of n cowbells from Naperthrill to Exeter, where there is actually grass
instead of corn. Before moving, he must pack his cowbells into kboxes of a fixed size. In order to keep his collection safe during transportation, he
won't place more than two cowbells into a single box. Since Kevin wishes to minimize expenses, he is curious about the smallest size box he can use to pack his entire collection.
Kevin is a meticulous cowbell collector and knows that the size of his i-th (1 ≤ i ≤ n)
cowbell is an integer si.
In fact, he keeps his cowbells sorted by size, so si - 1 ≤ si for
any i > 1. Also an expert packer, Kevin can fit one or two cowbells into a box of size s if
and only if the sum of their sizes does not exceed s. Given this information, help Kevin determine the smallest s for
which it is possible to put all of his cowbells into k boxes of size s.
Input
The first line of the input contains two space-separated integers n and k(1 ≤ n ≤ 2·k ≤ 100 000),
denoting the number of cowbells and the number of boxes, respectively.
The next line contains n space-separated integers s1, s2, ..., sn(1 ≤ s1 ≤ s2 ≤ ... ≤ sn ≤ 1 000 000),
the sizes of Kevin's cowbells. It is guaranteed that the sizes si are
given in non-decreasing order.
Output
Print a single integer, the smallest s for which it is possible for Kevin to put all of his cowbells into k boxes
of size s.
Sample test(s)
input
2 1 2 5
output
7
input
4 3 2 3 5 9
output
9
input
3 2
3 5 7
output
8
Note
In the first sample, Kevin must pack his two cowbells into the same box.
In the second sample, Kevin can pack together the following sets of cowbells: {2, 3}, {5}and {9}.
In the third sample, the optimal solution is {3, 5} and {7}.
错因:没有仔细分析题意,一直以为是分组背包问题,,自己把自己吓到了
解答:贪心问题,先将几个最大的物体一个一个的放入背包中,然后再将小物体加入已有大物体的背包中,要倒序(贪心)
<span style="font-size:18px;">#include<iostream> #include<queue> #include<vector> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; int a[100005]; int max(int a,int b) { return a>b?a:b; } int main() { int n,k; while(~scanf("%d %d",&n,&k)) { for(int i=1;i<=n;i++) scanf("%d",&a[i]); if(n<=k) { printf("%d\n",a ); continue; } int ans=a ,cnt=n-k,j=n-k+1; for(int i=cnt;i>=1;i--) ans=max(ans,a[i]+a[j++]);//倒序加进背包,体现贪心思想 printf("%d\n",ans); } return 0; } </span>
相关文章推荐
- 1.1
- 往者可谏,来者可追
- scp传输文件(好技能)
- 2015年终总结
- 值不能为 null。 参数名: source
- C语言-字符串
- Manacher算法
- 1.1
- 【android学习2】:Eclipse中HttpServlet类找不到
- U盘安装Debian,提示缺少无线网卡驱动
- Lua脚本
- 使用converView/viewHolder优化ListView
- python tkinter 学习笔记(1)
- 2015年的总结
- 2016年的规划
- Stick
- codeforces 336 Div.2 B. Hamming Distance Sum
- c++实现回调函数及使用方法
- 如何设置minSdkVersion和targetSdkVersion
- Cocoa Touch事件处理流程-响应者链