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 ;
}

最新文章

  1. Tomcat日志切割
  2. HTML5实战与剖析之触摸事件(touchstart、touchmove和touchend)(转)
  3. 上传本地文件到HDFS
  4. linux下gcc编译的参数详细说明
  5. 【技术贴】解决MySql连接不上 ip远程连接Host is not allowed to conn
  6. angular js 指令的数据传递 及作用域数据绑定
  7. delphi if 语句循环语句
  8. Hibernate之工具类HibernateUtil
  9. libpng处理png图片(一)
  10. Spring Cloud学习笔记-006
  11. hdfs一直处于safemode模式
  12. 解析CommandMessage
  13. Loj #2731 「JOISC 2016 Day 1」棋盘游戏
  14. Ionic3实现选项卡切换可以重新加载echarts
  15. java中自己常犯的错误汇总
  16. update set from 语句用法
  17. 在PL/SQL中调用存储过程--oracle
  18. C mysql (C API Commands out of sync; you can&#39;t run this command now)
  19. 07: Django 使用ldap登录、注销等
  20. java第四次实验报告

热门文章

  1. string 数组转 int 数组
  2. Nginx的反向代理和负载均衡服务
  3. 《构建之法》第五次作业——Alpha项目测试
  4. P1313 计算系数[二项式定理]
  5. 神经网络(2)---neurons and the brain
  6. git如何利用分支进行多人开发
  7. 洛谷P2396 yyy loves Maths VII【状压dp】
  8. The 2019 China Collegiate Programming Contest Harbin Site J. Justifying the Conjecture
  9. 40 | insert语句的锁为什么这么多?
  10. MongoDB 副本集节点添加与删除