博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
luoguP1064 金明的预算方案 (有依赖的背包问题)
阅读量:6798 次
发布时间:2019-06-26

本文共 1728 字,大约阅读时间需要 5 分钟。

题目链接:https://www.luogu.org/problemnew/show/P1064

这是一个有依赖的背包问题,属于01背包的变式。这题还好,每个主件最多有2个附件,那么在对主件进行背包的时候,决策就不再是两个,而是五个。

01背包的决策:

  1. 不选;  
  2. 选;

这个题目的决策:

  1. 不选;
  2. 只选主件;
  3. 选主件和附件1;
  4. 选主件和附件2;
  5. 选主件,附件1和附件2;

这里需要先判断选附件的决策是不是可行,即如果当前容量能放下附件1或附件2或附件1和附件2,才考虑状态转移。

因此这题的状态转移方程有4个:

  f[j]=max(f[j],f[j-mv[i]]+mc[i]);

       f[j]=max(f[j],f[j-mv[i]-av[i][1]]+mc[i]+ac[i][1]);

   f[j]=max(f[j],f[j-mv[i]-av[i][2]]+mc[i]+ac[i][2]);

       f[j]=max(f[j],f[j-mv[i]-av[i][1]-av[i][2]]+mc[i]+ac[i][1]+ac[i][2]);
其中mv表示主件的费用数组,mc表示主件的价值(费用×重要度)数组,av表示附件的费用数组,ac表示附件的价值数组。

av[i][0]表示主件i的附件个数,av[i][1/2]表示主件i的附件1/2的费用,ac[i][1/2]表示主件i的附件1/2的价值。

AC代码如下:

1 #include
2 #include
3 using namespace std; 4 5 int n,m; 6 int mv[65],mc[65],av[65][3],ac[65][3]; 7 int f[32005]; 8 9 int main(){10 scanf("%d%d",&n,&m);11 int v,p,q;12 for(int i=1;i<=m;i++){13 scanf("%d%d%d",&v,&p,&q);14 if(!q){15 mv[i]=v;16 mc[i]=v*p;17 }18 else{19 av[q][0]++;20 av[q][av[q][0]]=v;21 ac[q][av[q][0]]=v*p;22 }23 }24 for(int i=1;i<=m;i++)25 if(mv[i]){26 for(int j=n;j>=mv[i];j--){27 f[j]=max(f[j],f[j-mv[i]]+mc[i]);28 if(j>=mv[i]+av[i][1])29 f[j]=max(f[j],f[j-mv[i]-av[i][1]]+mc[i]+ac[i][1]);30 if(j>=mv[i]+av[i][2])31 f[j]=max(f[j],f[j-mv[i]-av[i][2]]+mc[i]+ac[i][2]);32 if(j>=mv[i]+av[i][1]+av[i][2])33 f[j]=max(f[j],f[j-mv[i]-av[i][1]-av[i][2]]+mc[i]+ac[i][1]+ac[i][2]);34 }35 }36 printf("%d\n",f[n]);37 return 0;38 }

 

转载于:https://www.cnblogs.com/FrankChen831X/p/10331615.html

你可能感兴趣的文章
工信部:《关于加强电信和互联网行业网络安全工作的指导意见》
查看>>
开源可实现迁移
查看>>
融合式架构Nutanix深入分析一
查看>>
RHEL6.3下配置简单Apache https
查看>>
利用Cocos2dx-3.0新物理特性模拟弹珠迷宫
查看>>
Office 365系列之三:Office365初体验
查看>>
VMware View client for iPad在医疗行业的应用
查看>>
Altiris 7.1 Agent
查看>>
独家爆料:创宇云与小鸟云的故事
查看>>
Windows Server 2012 RMS for Exchange Server 2013
查看>>
Linux网络IP配置
查看>>
FireEye:K3chang行动***欧洲外交部门
查看>>
关于Spring MVC 4,你需要知道的那些事
查看>>
如何远程调试Python代码
查看>>
你会用Python写洗脑神曲吗?
查看>>
kubernetes集群配置serviceaccount
查看>>
MyBatis多参数传递之默认命名方式示例——MyBatis学习笔记之十二
查看>>
Exchange 2013部署系列之(六)配置邮件流和客户端访问
查看>>
创业三年,走通一条路
查看>>
Mac 平台下功能强大的Shimo软件使用指南
查看>>