HDOJ 3593 The most powerful force
树形DP / 泛化物品的背包。。。可以去看09年徐持衡论文《浅谈几类背包问题》
The most powerful force
Time Limit: 16000/8000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 727 Accepted Submission(s): 182
The followings are the consists of ALPC:
1. There are more than one alpcs who are generals, like alpc04.
2. Every alpc has a direct superior, except the generals.
3. The alpc who has underling is an officer (Every officer’ number is no more than 500, like alpc21, alpc32).
4. If send one alpc to the war, so will his direct superior. Of course the general’s direct superior is himself.
5. Every alpc has two values. Vi is the fighting strength and Ci is the cost that the leader have to pay for the soldier.
Due to the AC country has limited financial resources, the leaders want to format the most powerful force with the cost not exceed G. Obviously, it is an uphill task! Therefore, the leaders of the AC country have assigned the task to alpc72 because of the outstanding behavior he had done at the ACM/ICPC. But alpc72 has been lost in hunting PLMM nowadays, so that he has no time to deal with this problem. What’s more, he left it to you.
The first line has two integers N and G, which stand for the total number of soldiers and the maximum cost. Soldiers numbered consequently from 1 to N. (1<=N<=100000, 1<=G<=10000)
The next N lines, each has three integers Ci, Vi and Fi. They are the cost, the measure of power and the direct superior of the ith soldier. (0<=Ci<=1000000, 0<=Vi<=1000000)
Special Thanks to alpc30.
#include <iostream>
#include <cstdio>
#include <cstring> using namespace std; struct Edge
{
int to,next;
}e[]; int dp[][],c[],v[],Adj[],Size,n,m,f; void Init()
{
Size=;
memset(Adj,-,sizeof(Adj));
} void Add_Edge(int u,int v)
{
///u--->v
e[Size].to=v;
e[Size].next=Adj[u];
Adj[u]=Size++;
}
/*
void ShowGraph()
{
for(int i=0;i<=n;i++)
{
for(int j=Adj[i];~j;j=e[j].next)
{
int v=e[j].to;
cout<<i<<"--->"<<v<<endl;
}
}
}
*/ void dfs(int p,int G)
{
int son;
for(int i=Adj[p];~i;i=e[i].next)
{
son=e[i].to;
if(~Adj[son])
{
for(int j=;j<=G-c[son];j++)
dp[son][j]=dp[p][j]+v[son];///对子节点进行赋值
dfs(son,G-c[son]);///递归求解(根节点一定取)
for(int j=G;j>=c[son];j--)
dp[p][j]=max(dp[p][j],dp[son][j-c[son]]);///合并的过程
}
else
{
for(int j=G;j>=c[son];j--)
dp[p][j]=max(dp[p][j],dp[p][j-c[son]]+v[son]);///是叶节点,就是普通01背包
}
}
} int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
Init();
c[]=v[]=;
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++)
{
scanf("%d%d%d",&c[i],&v[i],&f);
if(i!=f)
Add_Edge(f,i);
else
Add_Edge(,i);
}
///ShowGraph();
dfs(,m);
printf("%d\n",dp[][m]);
}
return ;
}
HDOJ 3593 The most powerful force的更多相关文章
- Spring In action chapter1_wiringBeans
Automatically wiring beans Spring attacks automatic wiring from two angles: Component scanning-Sprin ...
- Approaching the Fun Factor in Game Design
I recently did some research on this and talked to Dr. Clayton Lewis (computer Scientist in Residenc ...
- 4.2 面向对象分析(二) CRC方法标识概念类
CRC 又称为CRC索引卡片:CRC card 每张卡片代表一个类 Each card represents one class 每张卡片上写出这个类承担的职责.与其合作交互的其他类名 ...
- MeToo, one year on
表示转折/让步关系:but, however, nevertheless, whereas, although, despite, in spite of, still 表示比较或对比关系:simil ...
- android设计准则
------------缘由-------------------------------------------------------------------------------------- ...
- Brute force Attack
1 Introduction A common threat that webdevelopers face is a password-guessing attack known as a brut ...
- HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDOJ 2317. Nasty Hacks 模拟水题
Nasty Hacks Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- HDOJ 1326. Box of Bricks 纯水题
Box of Bricks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
随机推荐
- 手机卫士开发记录之json错误
- 《JavaScript权威指南》学习笔记 第四天 数组
昨天学习了js的对象,了解了js的原型链.在js里面万事万物皆对象,只不过一些原始类型要经过包装对象的包装才能暂时变为对象.数组的本质是什么呢?数组其实就是一组数,也就是链表.每个数只是这个链表上的一 ...
- 收集的一些jQuery (我平常用的少的,但确实挺有效果的)
禁用Jquery(动画)效果 jQuery.fx.off = true; 使用自己的 Bullets(这个有一丁点儿的小技巧) //这里是js代码 也就是给每个ul添加一个类名 然后给ul的子li前面 ...
- Centos7下搭建KVM虚拟机
PRE-INSTALL ============================================================= kvm相关安装包及其作用 qemu-kvm 主要的K ...
- python 培训之 Python 数据类型
0. 变量 计算机某块内存的标签,存储数据的容器的标签,可被覆盖. a = "" a = "a1bcd" a=a+"ddd&quo ...
- JS-用js的for循环实现九九乘法表以及其他算数题等
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>f ...
- SQL Server Transact-SQL 编程
T-SQL语句用于管理SQL Server数据库引擎实例,创建和管理数据库对象,以及查询.插入.修改和删除数据. Ø 变量 . 局部变量(Local Variable) 局部变量是用户可以自定义的变量 ...
- Linux查看CPU和内存使用情况
在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要.在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况.运行 top 命令后,CPU 使用状态会 ...
- 自然语言12_Tokenizing Words and Sentences with NLTK
https://www.pythonprogramming.net/tokenizing-words-sentences-nltk-tutorial/ # -*- coding: utf-8 -*- ...
- Java数据库——事务处理
在数据库中执行5条SQL语句,这些SQL语句本身需要保持一致,即要么同时成功,要么同时失败 事务基本操作 //============================================= ...