有依赖的背包---P1064 金明的预算方案
P1064 金明的预算方案
solution 1 暴搜 70pt
dfs (当前搜到了第几个物品,产生的总价值,剩下多少钱)
剪枝 1:如果剩下的钱数<0,直接return就好,没必要继续了
剪枝 2:如果所有物品都搜完了,结果记录一下
然后vis数组记录这个物品的主件有没有买,分两种情况继续往下搜,买该物品(前提合法)或者不买
注意没有主件的物品我们就标记它的主件是编号为0,我们买了它
code
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<queue> using namespace std; typedef long long ll; inline int read(){
int ans=;
char last=' ',ch=getchar();
while(ch<''||ch>'') last=ch,ch=getchar();
while(ch>=''&&ch<='') ans=ans*+ch-'',ch=getchar();
if(last=='-') ans=-ans;
return ans;
} int n,m;
int v[],w[],q[]; bool vis[];
int ans=; void dfs(int pos,int sum,int res)
{
if(res<) return ;
if(pos>m) {
ans=max(ans,sum);
return ;
}
if(res>=v[pos]&&vis[q[pos]]==) vis[pos]=,dfs(pos+,sum+w[pos],res-v[pos]);
vis[pos]=;
dfs(pos+,sum,res);
} int main()
{
n=read();m=read();
for(int i=;i<=m;i++){
v[i]=read();
w[i]=read();w[i]=w[i]*v[i];
q[i]=read();
}
vis[]=;
dfs(,,n);
printf("%d\n",ans);
return ;
}
solution 2 有依赖的背包 100pt
这道题目比较简单,可以转化成分组背包做
我们观察每个主件只有0~2个附件
(1)对于有主件的物品来说,它可以和主件划分为一类物品,那么对于这一类物品,我们有4种决策,一个也不买,只买主件,买主件和附件1,买主件和附件2,买主件和附件1和附件2,但是这4种决策是互斥的,所以可以转化成分组背包做【ps:可能一个主件只有一个附件】
(2)对于没有主件的物品来说,它本身自成一类,和上面的分组同理
code
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<queue> using namespace std; typedef long long ll; inline int read(){
int ans=;
char last=' ',ch=getchar();
while(ch<''||ch>'') last=ch,ch=getchar();
while(ch>=''&&ch<='') ans=ans*+ch-'',ch=getchar();
if(last=='-') ans=-ans;
return ans;
} int n,m;
int v[],w[],q[]; bool vis[];
int ans=; void dfs(int pos,int sum,int res)
{
if(res<) return ;
if(pos>m) {
ans=max(ans,sum);
return ;
}
if(res>=v[pos]&&vis[q[pos]]==) vis[pos]=,dfs(pos+,sum+w[pos],res-v[pos]);
vis[pos]=;
dfs(pos+,sum,res);
} int main()
{
n=read();m=read();
for(int i=;i<=m;i++){
v[i]=read();
w[i]=read();w[i]=w[i]*v[i];
q[i]=read();
}
vis[]=;
dfs(,,n);
printf("%d\n",ans);
return ;
}
有依赖的背包---P1064 金明的预算方案的更多相关文章
- 【dp】P1064 金明的预算方案
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元钱就行”. ...
- 洛谷 P1064 金明的预算方案【有依赖的分组背包】
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱 ...
- 洛谷 P1064 金明的预算方案 (有依赖的0/1背包)
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元钱就行”. ...
- P1064 金明的预算方案 (分组背包稍稍变形)
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元钱就行”. ...
- 洛谷 P1064 金明的预算方案(有依赖的背包问题)
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”.今 ...
- 洛谷P1064 金明的预算方案(01背包)
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NNN元钱就行” ...
- 洛谷P1064 金明的预算方案
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元钱就行”. ...
- 洛谷 P1064 金明的预算方案
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”.今 ...
- 【洛谷】P1064 金明的预算方案(dp)
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”.今 ...
随机推荐
- Elasticsearch 入门,基本概念和操作
基本概念 Node 与 Cluster Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例. 单个 Elastic 实例称为一个节点(nod ...
- ubuntu 中安装sublime-text3
ubuntu 中安装sublime_text3Enter "Alt+m" will show Markdown Preview 安装 输入注册码 汉化 安装插件 中文输入bug修复 ...
- 团队第六次作业-Beta冲刺及发布说明
1.相关信息 Q A 作业所属课程 https://edu.cnblogs.com/campus/xnsy/2019autumnsystemanalysisanddesign/ 作业要求 https: ...
- 猜数游戏-人机对战-经典的randint使用
翻阅去年的笔记,老师曾经教的random模块下的三种用法,其中之一是randint用法,今天上传,留作笔记参考.人生苦短,我用python! # -*- coding: UTF-8 -*- impor ...
- CQOI2005 三角形面积并 和 POJ1177 Picture
1845: [Cqoi2005] 三角形面积并 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 1664 Solved: 443[Submit][Stat ...
- DNSMAQ 搭建 DNS 服务
DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,它提供了DNS功能和可选择的DHCP功能.自己搭建公共DNS更加灵活,如果是在本地搭建,还可以大幅提高解析速度. 相比较 ...
- 什么是php面向对象及面向对象的三大特性
什么是面向对象? 面向对象编程,也就是我们常说的OOP,其实是面向对象的一部分.面向对象一共有3个部分:面向对象分析(OOA).面向对象设计(OOD).面向对象编程(OOP).我们现在将要学习的就是面 ...
- AS400遇到的一些问题和解决办法
1.没有权限进入distribution directory wrklnk 'QDLS\' >User not enrolled in system distribution direct ...
- 块状链表 bzoj 3343教主的魔法
//块状链表//分块排序,然后每次查找时在暴力查找头和尾两个块.//中间那些块,因为有序所以只需2分查找即可.我用的是lower_pound();//插入是,也是头和尾暴力插入,中间那些加到一个累计里 ...
- 02_Kibana的安装
Kibana部署 1. 下载Kibana $ wget https://artifacts.elastic.co/downloads/kibana/kibana-6.6.0-linux-x86_64. ...