【背包型动态规划】灵魂分流药剂(soultap) 解题报告
问题来源
BYVoid魔兽世界模拟赛
【问题描述】
皇家炼金师赫布瑞姆刚刚发明了一种用来折磨一切生物的新产品,灵魂分流药剂。灵魂分流药剂的妙处在于能够给服用者带来巨大的痛苦,但是却不会让服用者死去,而且可以阻止服用者的自杀。用它来对付敢于反对希尔瓦娜斯女王的狂徒们,简直是太精妙了。最近,侦察兵抓获了一个来自暴风城的人类探子,希尔瓦娜斯女王命令你用最痛苦的手段来折磨他。
你拥有N瓶药剂,按照成分配比的不同装在M个箱子中。每瓶药剂的有以下参数:对服用者造成的肉体伤害w,精神伤害v,所属的箱子t,和对服用者造成的痛苦程度p。人类探子的生命值为A,意志力为B。你只能从每个箱子中最多拿取1瓶药剂喂给他。注意,喂给他的药剂造成的总肉体伤害不能超过他的生命值A,否则他会死去,总的精神伤害不能超过他的意志力B,否则他会精神崩溃,我们没有必要给一个精神崩溃的傻瓜制造那么多痛苦。在不让他死去而且没有精神崩溃的前提下,你要尽可能给他制造更多的痛苦。这是女王的命令,如果你敢以任何理由或原因没有完成,你的下场就和他一样!
【输入格式】
第1行:四个整数N,M,A,B,M个箱子的编号为1..M。
第2行至第N+1行:第i+1行四个整数w,v,t,p表示第i瓶药剂的肉体伤害,精神伤害,所属箱子的编号,和造成的痛苦值。
【输出格式】
第1行:一个整数,表示能够造成的最大的痛苦值。
【输入样例】
5 3 20 20
5 10 1 200
10 5 1 100
8 11 2 56
10 10 2 50
5 5 3 100
【输出样例】
300
【数据说明】
对于30%的数据
N<=30
M<=5 对于100%的数据
N<=100
M<=10
A,B<=100
分析
经典的二维费用分组背包,自行百度 背包九讲 ,里面讲得很好,我也不再赘述了。下面是代码
/*
ID: ringxu97
LANG: C++
TASK: soultap
SOLUTION: 多费用分组背包
*/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<vector>
#include<stack>
#include<queue>
using namespace std;
const int maxn=+;
const int maxt=+;
struct DRUG//定义药剂
{
int w,v,p;
DRUG(int w,int v,int p){w=w;v=v;p=p;}
DRUG(){w=v=p=;}
}D[maxt][maxn];//D[i][j]表示第i个箱子里的第j种药
DRUG *P[maxt];//P[i]表示第i个箱子最后一种药剂的后一个位置的指针 int N,M,A,B;//题中变量
void init()//初始化P数组
{
for(int i=;i<=M;++i)
{
P[i]=D[i];
}
}
void adddurg(int w,int v,int t,int p)//向D[][]中加入新的药
{
DRUG *&tmp=P[t]; //获得指针
tmp->w=w;tmp->v=v;tmp->p=p;//加入药品
++tmp;//后移指针
return;
}
void read()//读入
{
scanf("%d%d%d%d",&N,&M,&A,&B);
init();
for(int i=;i<=N;++i)
{
int w,v,t,p;
scanf("%d%d%d%d",&w,&v,&t,&p);
adddurg(w,v,t,p);
}
}
int F[maxn][maxn];//F[k][i][j]处理到第k个箱子,w总和<=i,v总和<=j时的最大p(这里省去了第一维)
void Pack()//进行DP
{
memset(F,,sizeof(F));
for(int k=;k<=M;++k)
for(int i=A;i>=;--i)
for(int j=B;j>=;--j)
for(DRUG *l=D[k];l<P[k];++l)//注意这里的顺序与01背包不一样,要细细理解(顺序保证了每组物品只选一个或不选)
if(i>=l->w && j>=l->v)
{
F[i][j]=max(F[i][j],F[i-l->w][j-l->v]+l->p);
}
}
void print(){printf("%d\n",F[A][B]);}//打印
int main()
{
freopen("soultap.in", "r", stdin);
freopen("soultap.out", "w", stdout);
read();
Pack();
print();
return ;
}
【背包型动态规划】灵魂分流药剂(soultap) 解题报告的更多相关文章
- 【动态规划】天堂(Heaven) 解题报告
天堂(heaven) 题目描述 每一个要上天堂的人都要经历一番考验,当然包括小X,小X开始了他进入天堂的奇异之旅.地狱有18层,天堂竟然和地狱一样,也有很多很多层,天堂共有N层.从下到上依次是第1,2 ...
- 【codevs1014/1068】背包型动态规划
分析: 状态转移方程: v[j]=max(v[j],v[j-a[i]]+a[i]) (j ← tol downto a[i]) /* 作者:flipped 题目:p1014 装箱问题 */ #incl ...
- [置顶] 刘汝佳《训练指南》动态规划::Beginner (25题)解题报告汇总
本文出自 http://blog.csdn.net/shuangde800 刘汝佳<算法竞赛入门经典-训练指南>的动态规划部分的习题Beginner 打开 这个专题一共有25题,刷完 ...
- poj分类解题报告索引
图论 图论解题报告索引 DFS poj1321 - 棋盘问题 poj1416 - Shredding Company poj2676 - Sudoku poj2488 - A Knight's Jou ...
- 北大ACM试题分类+部分解题报告链接
转载请注明出处:優YoU http://blog.csdn.net/lyy289065406/article/details/6642573 部分解题报告添加新内容,除了原有的"大致题意&q ...
- 二模13day1解题报告
二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...
- 【NOIP2015】提高day2解题报告
题目: P1981跳石头 描述 一年一度的“跳石头”比赛又要开始了!这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N ...
- 【NOIP2015】提高组D1 解题报告
P1978神奇的幻方 Accepted 描述 幻方是一种很神奇的 N ∗ N 矩阵:它由数字 1,2,3, … … , N ∗ N 构成,且每行.每列及两条对角线上的数字之和都相同. 当 N 为奇数时 ...
- 【第40套模拟题】【noip2011_mayan】解题报告【map】【数论】【dfs】
目录:1.潜伏者 [map] 2.Hankson的趣味题[数论]3.mayan游戏[dfs] 题目: 1. 潜伏者(spy.pas/c/cpp)[问题描述]R 国和S 国正陷入战火之中,双方都互派间谍 ...
随机推荐
- Java开发工程师必会做试题
一.单选题 (共19道题,每题5分) 1.下面有关java的一些细节问题,描述错误的是? A.构造方法不需要同步化 B.一个子类不可以覆盖掉父类的同步方法 C.定义在接口中的方法默认是publ ...
- SQL三大范式
第一范式:确保每列的原子性. 如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式. 例如:顾客表(姓名.编号.地址.……)其中"地址"列还可 ...
- C#入门经典(第五版)学习笔记(二)
---------------函数---------------参数数组:可指定一个特定的参数,必须是最后一个参数,可使用个数不定的参数调用函数,用params关键字定义它们 例如: static i ...
- 改进《完美让IE兼容input placeholder属性的jquery实现》的不完美
<完美让IE兼容input placeholder属性的jquery实现>中的代码在IE9以下浏览器中会出错,原因是因为ie9以下的浏览器对input的标签的解释不同. 例如对以下文本框的 ...
- asp.net尽量不在js里写<%%>
asp.net尽量不在js里写<%%> eg: <script type="text/javascript"> var rootsid="&quo ...
- SGU 106.Index of super-prime
时间限制:0.25s 空间限制:4M 题目大意: 在从下标1开始素数表里,下标为素数的素数,称为超级素数(Super-prime),给出一个n(n<=10000) ...
- Java学习----一个对象怎么调用另一个对象呢?
打包 jar cvfm test1.jar manifmest.mf teacher.class student.class test1.class 运行 java -jar test1.jar pu ...
- wpf样式绑定 行为绑定 事件关联 路由事件实例
代码说明:我要实现一个这样的功能 有三个window窗口 每个窗体有一个label标签 当我修改三个label标签中任意一个字体颜色的时候 其他的label标签字体颜色也变化 首先三个窗体不用 ...
- 9张思维导图学习Javascript
分别归类为: javascript变量 javascript运算符 javascript数组 javascript流程语句 javascript字符串函数 javascript函数基础 javascr ...
- Flask-SQLALchemy查询
from: http://blog.sina.com.cn/s/blog_633277f90100kpvm.html 似乎ORM最难设计的部分是查询.特别是面向对象的查询,今天学习SQLAlchemy ...