J. Bottles
2 seconds
512 megabytes
standard input
standard output
Nick has n bottles of soda left after his birthday. Each bottle is described by two values: remaining amount of soda ai and bottle volumebi (ai ≤ bi).
Nick has decided to pour all remaining soda into minimal number of bottles, moreover he has to do it as soon as possible. Nick spends xseconds to pour x units of soda from one bottle to another.
Nick asks you to help him to determine k — the minimal number of bottles to store all remaining soda and t — the minimal time to pour soda into k bottles. A bottle can't store more soda than its volume. All remaining soda should be saved.
The first line contains positive integer n (1 ≤ n ≤ 100) — the number of bottles.
The second line contains n positive integers a1, a2, ..., an (1 ≤ ai ≤ 100), where ai is the amount of soda remaining in the i-th bottle.
The third line contains n positive integers b1, b2, ..., bn (1 ≤ bi ≤ 100), where bi is the volume of the i-th bottle.
It is guaranteed that ai ≤ bi for any i.
The only line should contain two integers k and t, where k is the minimal number of bottles that can store all the soda and t is the minimal time to pour the soda into k bottles.
4
3 3 4 3
4 7 6 5
2 6
2
1 1
100 100
1 1
5
10 30 5 6 24
10 41 7 8 24
3 11
In the first example Nick can pour soda from the first bottle to the second bottle. It will take 3 seconds. After it the second bottle will contain 3 + 3 = 6 units of soda. Then he can pour soda from the fourth bottle to the second bottle and to the third bottle: one unit to the second and two units to the third. It will take 1 + 2 = 3 seconds. So, all the soda will be in two bottles and he will spend 3 + 3 = 6seconds to do it.
思路:dp
可以先将最小的杯子数求出来。
dp[i][j][k]表示前i个杯子,容量为j时,选了k个的最大剩余水量,然后状态转移看代码;
1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string.h>
5 #include<stdlib.h>
6 #include<queue>
7 #include<set>
8 #include<vector>
9 #include<map>
10 #include<stack>
11 #include<deque>
12 using namespace std;
13 typedef long long LL;
14 int ans[1005];
15 int id[1005];
16 typedef struct node
17 {
18 int x;
19 int y;
20 bool operator<(const node&cx)const
21 {
22 if(y == cx.y)return cx.x > x;
23 else return y < cx.y;
24 }
25 } ss;
26 priority_queue<ss>que;
27 bool cmp(node p,node q)
28 {
29 return p.y < q.y;
30 }
31 ss ak[10005];
32 int dp[105][10005][105];
33 int main(void)
34 {
35 int n,m;
36 scanf("%d",&n);
37 int i,j;
38 int sum = 0;
39 int uu ;
40 for(i = 1; i <= n; i++)
41 {
42 scanf("%d",&ak[i].x);
43 sum+=ak[i].x;
44 }
45 uu = sum;
46 int vv = 0;
47 for(i = 1; i <= n; i++)
48 {
49 scanf("%d",&ak[i].y);
50 vv+=ak[i].y;
51 }
52 sort(ak+1,ak+n+1,cmp);
53 int s;
54 for(i = 0; i < 105; i++)
55 {
56 for(j = 0; j <= 10000; j++)
57 {
58 for(s = 0; s < 105; s++)
59 {
60 dp[i][j][s] = -1e9;
61 }
62 }
63 }
64 for(i = 0; i < 105; i++)
65 {
66
67 dp[i][0][0]=0;
68 }
69 int cn = 0;
70 int nn = n;
71 while(sum > 0)
72 {
73 sum -= ak[nn].y;
74 cn++;
75 nn--;
76 }
77 int maxx = 0;
78 for(i = 1; i <= n; i++)
79 {
80 for(s = vv; s >= ak[i].y; s--)
81 {
82 for(j = cn; j >= 1; j--)
83 {
84 dp[i][s][j] = max(dp[i][s][j],dp[i-1][s][j]);
85 dp[i][s][j] = max(dp[i][s][j],dp[i-1][s-ak[i].y][j-1]+ak[i].x);
86 if(j == cn&&s >= uu)
87 maxx = max(maxx,dp[i][s][j]);
88 }
89 }
90 for(s = ak[i].y-1; s >= 0; s--)
91 {
92 for(j = cn ; j >= 1; j--)
93 {
94 dp[i][s][j] =max(dp[i-1][s][j],dp[i][s][j]);
95 if(j == cn&&s >= uu)
96 maxx = max(maxx,dp[i][s][j]);
97 }
98 }
99 }
100 printf("%d %d\n",cn,uu-maxx);
101 return 0;
102 }
J. Bottles的更多相关文章
- 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest J. Bottles
J. Bottles time limit per test 2 seconds memory limit per test 512 megabytes input standard input ou ...
- codeforces 730 j.bottles
J. Bottles time limit per test 2 seconds memory limit per test 512 megabytes input standard input ou ...
- J. Bottles 二维费用背包问题
http://codeforces.com/contest/730/problem/J 3 4 36 1 90 45 40 其实可以知道,选出多少个瓶子呢?是确定的,当然选一些大的 ...
- Codeforces 730 J.Bottles (01背包)
<题目链接> 题目大意: 有n个瓶子,各有水量和容量.现在要将这写瓶子里的水存入最少的瓶子里.问你最少需要的瓶子数?在保证瓶子数最少的情况下,要求转移的水量最少. 解题分析:首先,最少的瓶 ...
- 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred) J dp 背包
J. Bottles time limit per test 2 seconds memory limit per test 512 megabytes input standard input ou ...
- 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest
A. Toda 2 按题意模拟即可. #include <bits/stdc++.h> using namespace std ; typedef pair < int , int ...
- 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest (Online Mirror) in codeforces(codeforces730)
A.Toda 2 思路:可以有二分来得到最后的数值,然后每次排序去掉最大的两个,或者3个(奇数时). /************************************************ ...
- 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred) 几道简单题的题解
A. Toda 2 题意:给你n个人,每个人的分数是a[i],每次可以从两个人到五个人的使得分数减一,使得最终的分数相等: 思路:假设答案为m:每个人的分数与答案m的差值为d[i],sum为d[i]的 ...
- codeforces A. Sereja and Bottles 解题报告
题目链接:http://codeforces.com/problemset/problem/315/A 题目意思:有n个soda bottles,随后给出这n个soda bottles的信息.已知第 ...
随机推荐
- Oracle-where exists()、not exists() 、in()、not in()用法以及效率差异
0.exists() 用法: select * from T1 where exists(select 1 from T2 where T1.a=T2.a) 其中 "select 1 fro ...
- 巩固java第七天
巩固内容: HTML 属性 属性是 HTML 元素提供的附加信息. HTML 属性 HTML 元素可以设置属性 属性可以在元素中添加附加信息 属性一般描述于开始标签 属性总是以名称/值对的形式出现,比 ...
- 【Go语言学习笔记】包
包其实是每个大型工程都会使用的模块化工具. 将相关的代码封装成一个包,给其他项目调用,提供不同的功能. GO的设计是将一个文件夹看成一个包,虽然不一定非要用文件夹的名字,但是比较建议. 同一个文件夹下 ...
- 16. Linux find查找文件及文件夹命令
find的主要用来查找文件,查找文件的用法我们比较熟悉,也可用它来查找文件夹,用法跟查找文件类似,只要在最后面指明查找的文件类型 -type d,如果不指定type类型,会将包含查找内容的文件和文件夹 ...
- Linux基础命令---mysqlimport导入数据库
mysqlimport mysqlimport指令可以用来将文本文件中的数据导入到数据库.在导入文本文件的时候,必须确保数据库中有一张表,而且他的名字和文本文件的名字是一样的. 此命令的适用范围:Re ...
- Advanced C++ | Virtual Copy Constructor
这个不懂,等看会了再写...
- lucene中创建索引库
package com.hope.lucene;import org.apache.commons.io.FileUtils;import org.apache.lucene.document.Doc ...
- SSM框架整合后使用pagehelper实现分页功能
一.导入pagehelper-5.1.10.jar和jsqlparser-3.1.jar两个jar包 二.配置pagehelper 2.1 在mybatis配置文件中配置 <plugins> ...
- 漏洞扫描器-AWVS
目录 介绍 漏洞扫描 网络爬虫==漏洞分析.验证 主机发现 子域名探测 SQL注入 HTTP头编辑 HTTP监听 介绍 AWVS为Acunetix Web Vulnarability Scanner的 ...
- linux 让.net 控制台后台运行
命令 nohup 你的shell命令 & 例如 nohup dotnet MQTTClient.dll & 输入完成后,终端会有提示 这时再按下回车 回到shell命 ...