http://codeforces.com/contest/730/problem/J

3

4    36    1

90   45   40

其实可以知道,选出多少个瓶子呢?是确定的,当然选一些大的。

那么问题转化为:

在n个瓶子中,选出k个,然后把剩余的n - k个瓶子得液体转移过去这k个里面,费用最小。其实就是使得剩余的n - k个瓶子的拥有液体数最小,那么其实就是需要那k个瓶子得拥有液体数最多。

dp[i][k][j]表示在前i个物品中,选出了k个物品,产生的总容量是j的时候,拥有液体数的最大值。

因为选出了k个东西,我们肯定是拥有一个容量的了,那么如果这n件物品,选出任意的k件东西,如果能产生相同的容量,我当然是选一些已经用了最多的,这样n-k个物品,转移液体过来,费时减小。

最后,还需要输出最小代价,就是,比如上面的样例,选容量是90是可以得,选容量是45也可以,那么就看看那个的代价更小了。

不一定容量大的,代价就小,因为可能用的不满。容量小的,就算用得满,也很小。

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <assert.h>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL; #include <iostream>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string>
const int maxn = 1e2 + ;
struct node {
int cur;
int tot;
} a[maxn];
struct dd {
int use;
int lef;
} dp[maxn][ * + ];
void work() {
int n;
cin >> n;
int has = ;
for (int i = ; i <= n; ++i) {
cin >> a[i].cur;
has += a[i].cur;
}
for (int i = ; i <= n; ++i) {
cin >> a[i].tot;
}
memset(dp, -0x3f, sizeof dp);
dp[][].use = ;
dp[][].lef = ;
for (int i = ; i <= n; ++i) {
for (int k = n; k >= ; --k) {
for (int j = * ; j >= a[i].tot; --j) {
if (dp[k][j].use < dp[k - ][j - a[i].tot].use + a[i].cur) {
dp[k][j].use = dp[k - ][j - a[i].tot].use + a[i].cur;
dp[k][j].lef = j - dp[k][j].use;
}
}
}
}
for (int k = ; k <= n; ++k) {
bool flag = false;
int ans = inf;
for (int j = * ; j >= ; --j) {
if (dp[k][j].use >= ) {
if (dp[k][j].lef >= has - dp[k][j].use) {
flag = true;
ans = min(ans, has - dp[k][j].use);
// cout << k << " " << has - dp[k][j].use << endl;
// return;
}
}
}
if (flag) {
cout << k << " " << ans << endl;
return;
}
}
} int main() {
#ifdef local
freopen("data.txt", "r", stdin);
// freopen("data.txt", "w", stdout);
#endif
work();
return ;
}

J. Bottles 二维费用背包问题的更多相关文章

  1. HDU 2159 二维费用背包问题

    一个关于打怪升级的算法问题.. 题意:一个人在玩游戏老是要打怪升级,他愤怒了,现在,还差n经验升级,还有m的耐心度(为零就删游戏不玩了..),有m种怪,有一个最大的杀怪数s(杀超过m只也会删游戏的.. ...

  2. UESTC - 878 温泉旅店 二维费用背包问题

    http://acm.uestc.edu.cn/#/problem/show/878 设dp[i][j][k]表示在前i个数中,第一个得到的异或值是j,第二个人得到的异或值是k的方案数有多少种. 因为 ...

  3. hdu_2159(二维费用背包)

    HDU_2159 二维费用背包问题 http://acm.hdu.edu.cn/showproblem.php?pid=2159 #include<cstdio> #include< ...

  4. 2159 ACM 杭电 杀怪 二维费用的背包+完全背包问题

    题意:已知经验值,保留的忍耐度,怪的种数和最多的杀怪数.求进入下一级的最优方案. 思路:用二维费用的背包+完全背包问题 (顺序循环)方法求解 什么是二维费用的背包问题? 问题: 二维费用的背包问题是指 ...

  5. 动态规划:HDU3496-Watch The Movie(二维费用的背包问题)

    Watch The Movie Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...

  6. 动态规划:HDU2159-FATE(二维费用的背包问题)

    FATE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  7. HDU 3496 (二维费用的01背包) Watch The Movie

    多多想看N个动画片,她对这些动画片有不同喜欢程度,而且播放时长也不同 她的舅舅只能给她买其中M个(不多不少恰好M个),问在限定时间内观看动画片,她能得到的最大价值是多少 如果她不能在限定时间内看完买回 ...

  8. hdu2159二维费用背包

    题目连接 背包九讲----二维费用背包 问题 二维费用的背包问题是指:对于每件物品,具有两种不同的费用:选择这件物品必须同时付出这两种代价:对于每种代价都有一个可付出的最大值(背包容量).问怎样选择物 ...

  9. 洛谷 P1507 NASA的食物计划 【二维费用背包】 || 【DFS】

    题目链接:https://www.luogu.org/problemnew/show/P1507 题目背景 NASA(美国航空航天局)因为航天飞机的隔热瓦等其他安全技术问题一直大伤脑筋,因此在各方压力 ...

随机推荐

  1. 关于 MAXScript 如何获取当前max版本

    用到了 GetFileVersion 相关文档在此:http://docs.autodesk.com/3DSMAX/16/ENU/MAXScript-Help/index.html?url=files ...

  2. 《统计推断(Statistical Inference)》读书笔记——第5章 随机样本的性质

    有了前四章知识的铺垫,第五章进入了统计研究的正题——样本的研究.样本可以说是统计学研究中最基本的对象,样本的数学性质也是最重要的研究课题,统计学的一大任务就是从一大堆样本中提取出有价值的知识,正如对原 ...

  3. CentOS 关闭防火墙和selinux

    1)关闭防火墙(每个节点) [Bash shell] 1 2 service iptables stop chkconfig iptables off 2)关闭selinux(重启生效) [Bash ...

  4. HackerRank "Larry's Array"

    I caught the sparkle in my mind and got AC1 ! It is a great great experience ! So the basic idea: pe ...

  5. Jquery 之 使用选择器

    jQuery选择器描述 jQuery选择器是jQuery框架的基础,jQuery对事件的处理.DOM操作.CSS动态控制.Ajax通信.动画设计都是在选择器基础上进行的.jQuery 选择器采用CSS ...

  6. 电脑控制台灯(c# hook,显示室温,联网校正时间)

          突发奇想,于是便写了一个小程序用于控制台灯,这几天功能也在不断的完善中,目前基本已经完成.下面进行功能的简述的代码的分析. 整体设计包含下位机程序和上位机程序.下位机用的c语言,上位机用的 ...

  7. jQuery - 疑惑

    设置内容和属性:http://www.runoob.com/jquery/jquery-dom-set.html

  8. Ubuntu 安装 Xfce4 桌面

    sudo apt-get install xubuntu-desktop From: http://tieba.baidu.com/p/294762291

  9. Log功能

    目录控制开关,若存在则创建log文件,输出. 宏函数,若debug打开,则输出. 多线程输出到同一文件. 通过mutex控制多个进程同时创建log文件.

  10. 使用CSS和jQuery实现tab页

    使用jquery来操作DOM是极大的方便和简单,这儿只是简单的用一个使用css和jquery来实现的tab页来简单介绍一些jQuery的一些方便使用的方法,下面是html文件: <!DOCTYP ...