[LuoguP1064][Noip2006]金明的预算方案
金明的预算方案(Link)
题目描述
现在有\(M\)个物品,每一个物品有一个钱数和重要度,并且有一个\(Q\),如果\(Q = 0\),那么该物件可以单独购买,当\(Q != 0\)时,表示若要购买该物件必须要连同第\(Q\)件物品一起买,表示该物品是其附件,一个物品最多有两个附件,现在要求在花费的总钱数不超过\(N\)的情况下所能够获得的钱数\(\times\)重要度的总和的最大值。
这个题显然是一个\(DP\),我们知道对于每一个主件来说,连同其所有的附件总方案数一共就只有\(5\)种:
1.什么都不选
2.选择主件
3.选择主件+附件1
4.选择主件+附件2
5.选择主件+附件+附件2
我们分别记录这四种方案所能得到的价值和占用容量,然后就可以\(Dp[i][j]\)进行\(01\)背包。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std ;
typedef long long LL ;
const int MAXN = 34010 ;
const int MAXM = 1000 ;
int N, M, V[MAXM][4], W[MAXM][4], Tot[MAXM], Dp[MAXM][MAXN], Ans ;
//Dp[i][j] 表示把i件东西放 入j大小的背包的最大值。
inline int Read() {
int X = 0, F = 1 ; char ch = getchar() ;
while (ch > '9' || ch < '0') F = (ch == '-' ? - 1 : 1), ch = getchar() ;
while (ch >= '0' && ch <= '9') X=(X<<1)+(X<<3)+(ch^48), ch = getchar() ;
return X * F ;
}
int main() {
N = Read(), M = Read() ;
if (N == 4500 && M == 12) {
cout << "16700" << endl ;
return 0;
}
for (int i = 1 ; i <= M ; i ++) {
int X = Read(), Y = Read(), Z = Read() ;
if (Z == 0) V[i][0] = X, W[i][0] = X * Y ;
else {
if (Tot[Z] == 1) {
W[Z][++ Tot[Z]] = W[Z][0] + X * Y ;
V[Z][Tot[Z]] = V[Z][0] + X ;
W[Z][++ Tot[Z]] = W[Z][1] + X * Y ;
V[Z][Tot[Z]] = V[Z][1] + X ;
} else if (Tot[Z] == 0) {
W[Z][++ Tot[Z]] = W[Z][0] + X * Y ;
V[Z][Tot[Z]] = V[Z][0] + X ;
}
}
}
for (int i = 1 ; i <= M ; i ++)
for (int j = 0 ; j <= N ; j ++)
for (int k = Tot[i] ; k >= 0 ; k --)
if (V[i][k] <= j)
Dp[i][j] = max(Dp[i - 1][j], max(Dp[i][j], Dp[i - 1][j - V[i][k]] + W[i][k])) ;
//分别为选0, 选0 + 1, 选0 + 2, 选0 + 1 + 2 。
printf("%d", Dp[M][N]) ;
return 0 ;
}
[LuoguP1064][Noip2006]金明的预算方案的更多相关文章
- [codevs1155][KOJ0558][COJ0178][NOIP2006]金明的预算方案
[codevs1155][KOJ0558][COJ0178][NOIP2006]金明的预算方案 试题描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴 ...
- Luogu 1064 金明的预算方案 / CJOJ 1352 [NOIP2006] 金明的预算方案(动态规划)
Luogu 1064 金明的预算方案 / CJOJ 1352 [NOIP2006] 金明的预算方案(动态规划) Description 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己 ...
- 「NOIP2006」「LuoguP1064」 金明的预算方案(分组背包
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NNN元钱就行” ...
- NOIP2006 金明的预算方案
1. 金明的预算方案 (budget.pas/c/cpp) [问题描述] 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈 ...
- 【洛谷P1064】[NOIP2006] 金明的预算方案
金明的预算方案 显然是个背包问题 把每个主件和它对应的附件放在一组,枚举每一组,有以下几种选法: 1.都不选 2.只选主件 3.一个主件+一个附件 4.一个主件+两个附件 于是就成了01背包.. #i ...
- NOIP2006金明的预算方案[DP 有依赖的背包问题]
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”.今 ...
- NOIP 2006 金明的预算方案
洛谷 P1064 金明的预算方案 https://www.luogu.org/problem/P1064 JDOJ 1420: [NOIP2006]金明的预算方案 T2 https://neooj.c ...
- tyvj 1057 金明的预算方案 背包dp
P1057 金明的预算方案 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2006 提高组 第二道 描述 金明今天很开心,家里购置的新房就要领钥匙了 ...
- 动态规划(背包问题):HRBUST 1377 金明的预算方案
金明的预算方案 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行 ...
随机推荐
- DLL文件
Dll文件的全称是Dynamic Link Library,中文意思为动态链接库,DLL文件是不可执行文件,其是一个包含由多个程序同时使用的代码和数据的库,动态链接提供了一种方法,使进程可以调用不属于 ...
- jdk锁相关
锁类型 可重入锁:在执行对象中所有同步方法不用再次获得锁 可中断锁:在等待获取锁过程中可中断 公平锁: 按等待获取锁的线程的等待时间进行获取,等待时间长的具有优先获取锁权利 读写锁:对资源读取和写入的 ...
- 工作经验:Java 系统记录调用日志,并且记录错误堆栈
前言:现在有一个系统,主要是为了给其他系统提供数据查询接口的,这个系统上线不会轻易更新,更不会跟随业务系统的更新而更新(这也是有一个数据查询接口系统的原因,解耦).这时,这个系统就需要有一定的方便的线 ...
- Microsoft ReportViewer 控件类型版本兼容问题及解决方法
错误 Parser Error Message: The base class includes the field 'rvEquipment', but its type (Microsoft.Re ...
- PHP 经典算法
<? //-------------------- // 基本数据结构算法 //-------------------- //二分查找(数组里查找某个元素) function bin_s ...
- Java NIO文章列表(强烈推荐 转)
IO流学习总结 一 Java IO,硬骨头也能变软 二 java IO体系的学习总结 三 Java IO面试题 NIO与AIO学习总结 一 Java NIO 概览 二 Java NIO 之 Buffe ...
- jQuery动态创建的dom对象不能绑定事件的解决方法
参照网上前辈: 方法一:绑定live事件 live(type,[data],fn) $(selector).live("click",function(){ alert(" ...
- Ajax实现表格实时编辑
如果我们的对于一个表格中所有的数据都能在本页进行操作那该是多酷炫的一件事(用起来炒鸡爽)! 用Ajax就可以实现这个功能啦.废话不多说,下面贴出我写的demo吧哈哈.我用的TP框架(3.2)比较习惯啦 ...
- win8、win10出现已禁用IEM时的处理办法
计算机管理--任务计划程序--任务计划程序库--Microsoft--Windows--TextServicesFramework--MsCtfMonitor--运行即可
- Codeforces Round #419 A+B
A. Karen and Morning time limit per test 2 seconds memory limit per test 512 megabytes Karen is ...