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. Demo03找素数

    package Deom1;import java.awt.*;import java.util.Scanner;public class lx {//输入任意两个正整数,求出这两个正整数之间素数的个 ...

  2. C#生成编号

    //自动生成账单编号 public string GetNewPoID(string Prefix) { string NewPoID = Prefix + DateTime.Now.Year.ToS ...

  3. Shell学习(八)——dd命令

    一.dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2 参数注释: 1. ...

  4. 字符串属性转变List属性存入数据库

    项目中有系统IP字段,现将string转List存入数据库,每个功能块持久层实现方法不一样(分为jpa和mp) jpa: @Convert(converter = JpaConverterListJs ...

  5. struct vs class in C++

    在C++中,除了以下几点外,struct和class是相同的. (1)class的成员的默认访问控制是private,而struct的成员的默认访问权限是public. 例如,program 1会编译 ...

  6. linux网络相关命令之脚本和centos启动流程

    nice 功用:设置优先权,可以改变程序执行的优先权等级.等级的范围从-19(最高优先级)到20(最低优先级).优先级为操作系统决定cpu分配的参数,优先级越高,所可能获得的 cpu时间越长. 语法: ...

  7. 【JAVA】【Basic】概念

    1. 历史 1.1. Sun, Green Project, 90年代初,为机顶盒提供一个统一的语言层,oak-->Java, James Gosling, Sun World 1995:JAV ...

  8. MySQL如何使用coalesce函数

    coalesce(a,b,c); 参数说明:如果a==null,则选择b:如果b==null,则选择c:如果a!=null,则选择a:如果a b c 都为null ,则返回为null(没意义)

  9. Tableau如何使用 度量值和度量名称

    一.把子类别拖拽至列 二.度量值拖拽至行 三.度量名称拖拽至筛选器,右键-编辑筛选器-选择销售额和利润 四.度量名称拖拽是标记选择颜色-其它细节调整-最终结果如下所示

  10. Python基础入门(7)- Python异常处理机制

    1.初识异常 1.1.什么是异常与异常处理 异常就是错误 异常会导致程序崩溃并停止运行 能监控并捕获异常,将异常部位的程序进行修理使得程序继续正常运行 1.2.异常的语法 1 # coding:utf ...