问题描述

“我需要你为我制订一个购物的方案。我将要为我的宫殿增置一些家具。有n 种备选家具,家具有主件和附件之分。在购买某个主件的附件之前,我必须先购买其对应的主件。某一主件的附件不会是另一样家具所对应的主件。每一件家具 i 都有自己的价格 x 与重要度 y。要完成这个问题,你需要在 1s 内得出我在花费不超过 m 元的情况下所能得到的家具的价格与重要度乘积的和最大。”CJK 不敢怠慢,立刻开始码代码。

输入格式

第一行两个数,m 和 n,接下来 n 行,第 i 行三个数 x,y,z,分别表示该物品的价格、重要度及它的主件的编号(z 为 0 表示该物品为主件)。

输出格式

每一样购买的家具的价格与重要度的乘积的和。(形如 xiyi+xjyj+......,i、j 为购买的家具的编号)

样例输入输出

样例输入1

1000 5

800 2 0

400 5 1

300 5 1

400 3 0

500 2 0

样例输出1

2200

样例输入2

1000 5

800 2 0

400 5 1

300 5 1

400 3 1

500 2 1

样例输出2

1600

解析

如果不考虑主附件,这就是一个裸的完全背包问题。但是如果选附件就必须选主件,所以我们考虑如何处理依赖关系。我们可以设一个分数组表示选了当前主件后用这个主件的附件跑01背包后的结果。每次DP前,都把之前主数组的结果复制到分数组中,跑完背包后再用分数组去更新主数组。注意,在跑01背包时,由于已经选了当前主件,花费的范围要注意。

代码

#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
vector<int> v[62];
int n,m,i,j,k,w[62],c[62],op[62],f[30002],g[30002];
int main()
{
freopen("budget.in","r",stdin);
freopen("budget.out","w",stdout);
cin>>m>>n;
for(i=1;i<=n;i++){
cin>>w[i]>>c[i]>>op[i];
c[i]*=w[i];
if(op[i]) v[op[i]].push_back(i);
}
for(i=1;i<=n;i++){
if(!op[i]){
for(j=w[i];j<=m;j++) g[j]=f[j-w[i]]+c[i];
for(j=0;j<v[i].size();j++){
int x=v[i][j];
for(k=m;k>=w[i]+w[x];k--) g[k]=max(g[k],g[k-w[x]]+c[x]);//在这里注意范围
}
for(j=1;j<=m;j++) f[j]=max(f[j],g[j]);
memset(g,0,sizeof(g));
}
}
cout<<f[m]<<endl;
fclose(stdin);
fclose(stdout);
return 0;
}

总结

没有想到还是因为想的不够细致,没有将DP的约束与状态分开,导致约束失效。

Test 6.29 T1 预算方案的更多相关文章

  1. [codevs1155][KOJ0558][COJ0178][NOIP2006]金明的预算方案

    [codevs1155][KOJ0558][COJ0178][NOIP2006]金明的预算方案 试题描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴 ...

  2. NOIP2006 金明的预算方案

    1.             金明的预算方案 (budget.pas/c/cpp) [问题描述] 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈 ...

  3. 动态规划(背包问题):HRBUST 1377 金明的预算方案

    金明的预算方案 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行 ...

  4. Luogu 1064 金明的预算方案 / CJOJ 1352 [NOIP2006] 金明的预算方案(动态规划)

    Luogu 1064 金明的预算方案 / CJOJ 1352 [NOIP2006] 金明的预算方案(动态规划) Description 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己 ...

  5. [LuoguP1064][Noip2006]金明的预算方案

    金明的预算方案(Link) 题目描述 现在有\(M\)个物品,每一个物品有一个钱数和重要度,并且有一个\(Q\),如果\(Q = 0\),那么该物件可以单独购买,当\(Q != 0\)时,表示若要购买 ...

  6. 算法笔记_103:蓝桥杯练习 算法提高 金明的预算方案(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些 ...

  7. tyvj 1057 金明的预算方案 背包dp

    P1057 金明的预算方案 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2006 提高组 第二道 描述 金明今天很开心,家里购置的新房就要领钥匙了 ...

  8. 【洛谷P1064】[NOIP2006] 金明的预算方案

    金明的预算方案 显然是个背包问题 把每个主件和它对应的附件放在一组,枚举每一组,有以下几种选法: 1.都不选 2.只选主件 3.一个主件+一个附件 4.一个主件+两个附件 于是就成了01背包.. #i ...

  9. 「NOIP2006」「LuoguP1064」 金明的预算方案(分组背包

    题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NNN元钱就行” ...

随机推荐

  1. ImageView的src与background及ScaleType

    1 概述 开发中经常使用Imageview的src和background属性,从字面上看src是路径,background是背景.二者都可以显示drawable或者颜色.设置drawable图片资源时 ...

  2. Redis 简介,安装,卸载

    一.Redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(s ...

  3. rm命令反向选择删除文件

    反向删除文件, 参考这篇文章. http://blog.csdn.net/web_go_run/article/details/46009723 shopt是设置shell的全局选项 shopt -p ...

  4. Html.Partial和Html.RenderPartial和Html.RenderAction区别

    1.Html.Partical 把View页或模板解析成字符串然后输出到渲染页面上 @Html.Partical("viewxxx") 2.Html.RenderPartical则 ...

  5. 测开之路八十九:HTML之图片处理

    <!--width.height设置图片尺寸 alt:当图片不能展示时,显示的内容 title:鼠标放上去时展示的内容--> <img src="../imges/img0 ...

  6. 应用安全 - 软件漏洞 - 泛微OA漏洞汇总

    SQL注入 前台SQL注入 用户名:admin' or password like 'c4ca4238a0b923820dcc509a6f75849b' and 'a'='a 密码: 1 验证页面参数 ...

  7. spring boot 将对象转换为json返回

    Spring Boot默认使用Jackson将对象转换为json,需要配置以下依赖: compile group: 'com.fasterxml.jackson.core', name: 'jacks ...

  8. 今天起,重新开头学习Java - 一、安装环境

    先拜领路人 https://blog.csdn.net/u011541946/article/category/6951961/3? 一.安装JDK 1. 下载 www.java.com JDK是Ja ...

  9. NFS实现文件共享

    NFS(Network Files System)即网络文件系统,NFS文件系统协议允许网络中的主机通过TCP/IP协议进行资源共享,NFS客户端可以像使用本地资源一样读写远端NFS服务端的资料,需要 ...

  10. Maven 修改jdk版本

    Maven 修改jdk版本方法1: <build> <plugins> <plugin> <groupId>org.apache.maven.plugi ...