J. Bottles
time limit per test

2 seconds

memory limit per test

512 megabytes

input

standard input

output

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.

Input

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.

Output

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.

Examples
input
4
3 3 4 3
4 7 6 5
output
2 6
input
2
1 1
100 100
output
1 1
input
5
10 30 5 6 24
10 41 7 8 24
output
3 11
Note

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的更多相关文章

  1. 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 ...

  2. codeforces 730 j.bottles

    J. Bottles time limit per test 2 seconds memory limit per test 512 megabytes input standard input ou ...

  3. J. Bottles 二维费用背包问题

    http://codeforces.com/contest/730/problem/J 3 4    36    1 90   45   40 其实可以知道,选出多少个瓶子呢?是确定的,当然选一些大的 ...

  4. Codeforces 730 J.Bottles (01背包)

    <题目链接> 题目大意: 有n个瓶子,各有水量和容量.现在要将这写瓶子里的水存入最少的瓶子里.问你最少需要的瓶子数?在保证瓶子数最少的情况下,要求转移的水量最少. 解题分析:首先,最少的瓶 ...

  5. 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 ...

  6. 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest

    A. Toda 2 按题意模拟即可. #include <bits/stdc++.h> using namespace std ; typedef pair < int , int ...

  7. 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest (Online Mirror) in codeforces(codeforces730)

    A.Toda 2 思路:可以有二分来得到最后的数值,然后每次排序去掉最大的两个,或者3个(奇数时). /************************************************ ...

  8. 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]的 ...

  9. codeforces A. Sereja and Bottles 解题报告

    题目链接:http://codeforces.com/problemset/problem/315/A 题目意思:有n个soda bottles,随后给出这n个soda bottles的信息.已知第 ...

随机推荐

  1. Hive-insert into table 与 insert overwrite table 区别

    区分insert into 和 insert overowrite: 0. 命令格式 INSERT OVERWRITE|INTO TABLE tablename [PARTITION (partcol ...

  2. accommodate, accompany

    accommodate 词源: to make fit, suitable; 近/反义词: adapt, adjust, lodge; disoblige, incommode, misfit Lod ...

  3. 转 序列化Serializable和Parcelable的区别详解

    什么是序列化,为什么要进行序列化 答:对象要进行传输(如:activity 与activity间 ,网络间 进程间等等).存储到本地就必须进行序列化 . 这种可传输的状态就是序列化. 怎么序列化??两 ...

  4. 【Python】【Basic】【数据类型】基本数据类型

    1.数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取值范围为-2 ...

  5. C/C++ Qt 数据库SqlRelationalTable关联表

    在上一篇博文中详细介绍了SqlTableModle组件是如何使用的,本篇博文将介绍SqlRelationalTable关联表组件,该组件其实是SqlTableModle组件的扩展类,SqlRelati ...

  6. 特定场景下的PLC 远程控制和数据读取

    最近有位博友提出了一种应用场景,根据工作中实际遇到的类似的产品应用场景,记录下自己的解决方案. 场景: 需要在云端控制和采集各个站点的PLC数据.各个站点是分散的,每个站点有公网访问能力,但是分散站点 ...

  7. 使用wesocket从 rabbitMQ获取实时数据

    rabbitmq支持stomp组件,通过stomp组件和websocket可以从rabbitMQ获取实时数据.这里分享一个demo: 使用时需要引入的js ,用到了sock.js和stomp.js & ...

  8. java 注解的几大作用及使用方法详解

    初学者可以这样理解注解:想像代码具有生命,注解就是对于代码中某些鲜活个体的贴上去的一张标签.简化来讲,注解如同一张标签. 在未开始学习任何注解具体语法而言,你可以把注解看成一张标签.这有助于你快速地理 ...

  9. Mysql从头部署多个版本

    目录 一.环境准备 二.下载安装包 三.Mysql-5.6单独部署 四.Mysql-5.7单独部署 五.添加到多版本控制 六.muliti使用 一.环境准备 系统:centos7.3一台 软件版本:m ...

  10. Nginx模块之nginx_upstream_check_module

    目录 一.介绍 二.使用 三.参数 一.介绍 大家都知道,前端nginx做反代,如果后端服务器宕掉的话,nginx是不能把这台realserver剔除upstream的,所以还会有请求转发到后端的这台 ...