题目链接: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 动态规划 多个背包问题的更多相关文章

  1. 【动态规划】简单背包问题II

    问题 B: [动态规划]简单背包问题II 时间限制: 1 Sec  内存限制: 64 MB提交: 21  解决: 14[提交][状态][讨论版] 题目描述 张琪曼:“为什么背包一定要完全装满呢?尽可能 ...

  2. 动态规划入门-01背包问题 - poj3624

    2017-08-12 18:50:13 writer:pprp 对于最基础的动态规划01背包问题,都花了我好长时间去理解: poj3624是一个最基本的01背包问题: 题意:给你N个物品,给你一个容量 ...

  3. 动态规划:HDU-2542-0-1背包问题:饭卡

    解题心得: 这题就是一个简单的0-1背包问题,只不过加了一系列的限制.可以想办法消去限制,直接转换成0-1背包问题的模板形式. 需要注意的几个点:首先对于剩余的5元钱的处理可以直接在总的钱数上将5减去 ...

  4. 动态规划:HDU-1203-0-1背包问题:I NEED A OFFER!

    解题心得: 动态规划就是找到状态转移方程式,但是就本题0-1背包问题来说转移方程式很简单,几乎看模板就行了. 在本题来说WA了很多次,很郁闷,因为我记录v[i]的时候i是从0开始的,一些特殊数据就很尴 ...

  5. 动态规划专题 01背包问题详解 HDU 2546 饭卡

    我以此题为例,详细分析01背包问题,希望该题能够为大家对01背包问题的理解有所帮助,对这篇博文有什么问题可以向我提问,一同进步^_^ 饭卡 Time Limit: 5000/1000 MS (Java ...

  6. C++动态规划求解0-1背包问题

    问题描述: 给定n种物品和一背包.物品i的重量是wi,其价值为vi,背包的容量为C.问:应该如何选择装入背包的物品,是的装入背包中物品的总价值最大? 细节须知: 暂无. 算法原理: a.最优子结构性质 ...

  7. 【动态规划/二维背包问题】mr355-三角形牧场

    应该也是USACO的题目?同样没有找到具体出处. [题目大意] 和所有人一样,奶牛喜欢变化.它们正在设想新造型牧场.奶牛建筑师Hei想建造围有漂亮白色栅栏的三角形牧场.她拥有N(3≤N≤40)块木板, ...

  8. 动态规划(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+ ...

  9. 动态规划:完全背包问题-HDU1114-Piggy-Bank

    解题心得: 1.这是一个完全背包问题的变形,题目要求是求在规定的重量下求价值最小,所以需要将d[0]=0关键的初始化 2.当不可能出现最小的价值时,d的状态并没有被改变,说明并没有放进去一个硬币. 题 ...

随机推荐

  1. [luogu4053 JSOI2007] 建筑抢修 (贪心 优先队列)

    传送门 题目描述 小刚在玩JSOI提供的一个称之为"建筑抢修"的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤 ...

  2. [luogu4310] 绝世好题 (递推)

    传送门 题目描述 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<=len). 输入输出格式 输入格式: 输入文件共2行. 第一行包括 ...

  3. MySQL 数据库类型

  4. Appium遇到问题:

    问题一:问题org.openqa.selenium.remote.UnreachableBrowserException: Could not start a new session. Possibl ...

  5. rails 安装后调整gem sources 地址

    rails 安装后调整gem sources 地址 使用https会有认证的问题: 移除原有的: gem sources --remove https://rubygems.org/ 查看当前的: g ...

  6. jQuery动画animate()的使用

    自己定义动画效果: 使用方法:animate(js对象,运行时间.回调函数): js对象:{ }描写叙述动画运行之后元素的样式 运行时间:毫秒数 回调函数:动画运行结束后要运行的函数 html代码: ...

  7. AnyForWeb告诉你什么才是“最好的”编程语言

    一被问到最好的编程语言是什么,专家们一定会异口同声的说,'世界上根本没有什么最好的,每一种编程语言都有它存在的意义和价值'. AnyForWeb认为,后半句所阐述的观点全然没错,但最好的也并不是不存在 ...

  8. React组件化开发

    环境搭建: 1.安装node.js 2.安装cnpm  # npm install -g cnpm --registry=https://registry.npm.taobao.org 3.全局安装c ...

  9. (转载)Android项目实战(二十七):数据交互(信息编辑)填写总结

    Android项目实战(二十七):数据交互(信息编辑)填写总结   前言: 项目中必定用到的数据填写需求.比如修改用户名的文字编辑对话框,修改生日的日期选择对话框等等.现总结一下,方便以后使用. 注: ...

  10. 动画view

    1:view动画 @1:xml中 alph:渐变透明度动画效果 scale:渐变尺寸伸缩动画效果 translate:画面转换位置移动动画效果 rootate:画面转移旋转动画效果 @2:JavaCo ...