UVALive-7197 Axles 动态规划 多个背包问题
题目链接:https://cn.vjudge.net/problem/UVALive-7197
题意
需要生产n种(2<=n<=14)零件,每种零件可以用两种材料制作,对这两种材料的消耗相同,产出价值不同。
但是一种零件一旦选定原材料就不能更改。
给这两种原材料的量和各零件生产方案,问生产最大价值多少。
思路
一开始WA好几次,没发现原材料就不能更改的条件呵呵。
首先对零件分个类,用第一种材料还是第二种。
然后分别做两个完全背包即可-_-
总复杂度O(nm2^n)
顺便,这种多背包解决问题的思考方向,在另一个题目里提到了。
关于理解背包的本质,就在那道题了,这道题也是好题。
提交过程
| WA | 原材料就不能更改 |
| AC |
代码
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxw=2e3+20, INF=0x3f3f3f3f;
const int maxn=100+20;
int n, q, r;
int wei[maxn], val_1[maxn], val_2[maxn];
int f[maxw], g[maxw], ans;
bool vis[maxn];
void compKnap(int dp[], int total, int cost, int val){
for (int i=cost; i<=total; i++)
dp[i]=max(dp[i], dp[i-cost]+val);
}
void dfs(int dep){
if (dep==n+1){
memset(f, 0, sizeof(f));
memset(g, 0, sizeof(g));
for (int i=1; i<=n; i++){
if (vis[i]) compKnap(f, q, wei[i], val_1[i]);
else compKnap(g, r, wei[i], val_2[i]);
}
ans=max(ans, f[q]+g[r]);
}else{
vis[dep]=true; dfs(dep+1);
vis[dep]=false;dfs(dep+1);
}
}
int main(void){
while (scanf("%d", &n)==1 && n!=-1){
for (int i=1; i<=n; i++)
scanf("%d%d%d", &wei[i], &val_1[i], &val_2[i]);
scanf("%d%d", &q, &r);
ans=0;
dfs(1);
printf("%d\n", ans);
}
return 0;
}
| Time | Memory | Length | Lang | Submitted |
|---|---|---|---|---|
| 1699ms | None | 1020 | C++ 5.3.0 | 2018-08-21 05:35:04 |
UVALive-7197 Axles 动态规划 多个背包问题的更多相关文章
- 【动态规划】简单背包问题II
问题 B: [动态规划]简单背包问题II 时间限制: 1 Sec 内存限制: 64 MB提交: 21 解决: 14[提交][状态][讨论版] 题目描述 张琪曼:“为什么背包一定要完全装满呢?尽可能 ...
- 动态规划入门-01背包问题 - poj3624
2017-08-12 18:50:13 writer:pprp 对于最基础的动态规划01背包问题,都花了我好长时间去理解: poj3624是一个最基本的01背包问题: 题意:给你N个物品,给你一个容量 ...
- 动态规划:HDU-2542-0-1背包问题:饭卡
解题心得: 这题就是一个简单的0-1背包问题,只不过加了一系列的限制.可以想办法消去限制,直接转换成0-1背包问题的模板形式. 需要注意的几个点:首先对于剩余的5元钱的处理可以直接在总的钱数上将5减去 ...
- 动态规划:HDU-1203-0-1背包问题:I NEED A OFFER!
解题心得: 动态规划就是找到状态转移方程式,但是就本题0-1背包问题来说转移方程式很简单,几乎看模板就行了. 在本题来说WA了很多次,很郁闷,因为我记录v[i]的时候i是从0开始的,一些特殊数据就很尴 ...
- 动态规划专题 01背包问题详解 HDU 2546 饭卡
我以此题为例,详细分析01背包问题,希望该题能够为大家对01背包问题的理解有所帮助,对这篇博文有什么问题可以向我提问,一同进步^_^ 饭卡 Time Limit: 5000/1000 MS (Java ...
- C++动态规划求解0-1背包问题
问题描述: 给定n种物品和一背包.物品i的重量是wi,其价值为vi,背包的容量为C.问:应该如何选择装入背包的物品,是的装入背包中物品的总价值最大? 细节须知: 暂无. 算法原理: a.最优子结构性质 ...
- 【动态规划/二维背包问题】mr355-三角形牧场
应该也是USACO的题目?同样没有找到具体出处. [题目大意] 和所有人一样,奶牛喜欢变化.它们正在设想新造型牧场.奶牛建筑师Hei想建造围有漂亮白色栅栏的三角形牧场.她拥有N(3≤N≤40)块木板, ...
- 动态规划(DP),0-1背包问题
题目链接:http://poj.org/problem?id=3624 1.p[i][j]表示,背包容量为j,从i,i+1,i+2,...,n的最优解. 2.递推公式 p[i][j]=max(p[i+ ...
- 动态规划:完全背包问题-HDU1114-Piggy-Bank
解题心得: 1.这是一个完全背包问题的变形,题目要求是求在规定的重量下求价值最小,所以需要将d[0]=0关键的初始化 2.当不可能出现最小的价值时,d的状态并没有被改变,说明并没有放进去一个硬币. 题 ...
随机推荐
- 实验一:JAVA实验环境搭建 ,JDK下载与安装及 Eclipse下载与安装
一.搭建JAVA实验环境 1.JDK的下载 (1)打开 IE 浏览器,输入网址“http://www.oracle.com/index.html”,浏览 Oracle 官方主页.鼠标双击Downloa ...
- Linux 密码的暴力破解
Linux 的密码的介绍 两个文件 1 . /etc/passwd 2 . /etc/shadow ## 关于/etc/shadow 文件的介绍 1 . 第一个字段是用户名 2 . 第二字字段是加密的 ...
- 参数化取值策略Sequential
1.Sequential+Each iteration(顺序方式+每次迭代更新取值),设置Run—Logic中action循环迭代11次,并运行以上脚本,结果如下: 2.Sequential+ ...
- String 字符串的追加,数组拷贝
package chengbaoDemo; import java.util.Arrays; /** *需求:数组的扩容以及数据的拷贝 *分析:因为String的实质是以字符数组存储的,所以字符串的追 ...
- Could not publish server configuration for Tomcat v7.0 Server at localhost. Multiple Contexts have a path of "/ezoutdoor".
Could not publish server configuration for Tomcat v7.0 Server at localhost. Multiple Contexts have a ...
- TNS-12557: TNS:protocol adapter not loadable TNS-12560: TNS:protocol adapter error
Description: Oracle 10.2 on hpux 11.23 PA. When i try to start listener i go the next errors: Error ...
- HDU 3861--The King’s Problem【scc缩点构图 && 二分匹配求最小路径覆盖】
The King's Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- 纪念2014 TI DSP大奖赛
偶然发现TI官网有新闻报道大奖赛,还有沈洁女士给我们颁奖的照片.纪念一下. 第六届TI DSP及嵌入式大奖赛决赛暨颁奖典礼在厦门大学成功举行 Frances Han 2013-2014 TI DSP ...
- ELF文件格式定义
ELF(Executable and Linking Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西.以及都以什么样的格式去放这些东西.它自 ...
- c++面向对象程序设计 谭浩强 第三章答案
2: #include <iostream> using namespace std; class Date {public: Date(int,int,int); Date(int,in ...