树形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

Problem Description
The leaders of AC country made a decision to regain the TW Island. But they have to face the powerful force from USB. So the leaders have to hire some excellent soldiers from the training base called ALPC to format the most powerful force.
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.

 
Input
There will have several test cases. 
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)
 
Output
Output one integer (must within 32 bits)as the maximum fighting strength of the most powerful force.
 
Sample Input
5 10
1 2 1
10 5 2
1 1 1
1 1 1
1 1 3
5 10
1 2 1
2 4 2
1 1 1
1 1 1
1 1 3
 
Sample Output
5
9

Hint

Special Thanks to alpc30.

 
Author
alpc32
 
Source
 
Recommend
zhengfeng
 
 #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的更多相关文章

  1. Spring In action chapter1_wiringBeans

    Automatically wiring beans Spring attacks automatic wiring from two angles: Component scanning-Sprin ...

  2. Approaching the Fun Factor in Game Design

    I recently did some research on this and talked to Dr. Clayton Lewis (computer Scientist in Residenc ...

  3. 4.2 面向对象分析(二) CRC方法标识概念类

    CRC  又称为CRC索引卡片:CRC card  每张卡片代表一个类 Each card represents one class  每张卡片上写出这个类承担的职责.与其合作交互的其他类名   ...

  4. MeToo, one year on

    表示转折/让步关系:but, however, nevertheless, whereas, although, despite, in spite of, still 表示比较或对比关系:simil ...

  5. android设计准则

    ------------缘由-------------------------------------------------------------------------------------- ...

  6. Brute force Attack

    1 Introduction A common threat that webdevelopers face is a password-guessing attack known as a brut ...

  7. HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  8. HDOJ 2317. Nasty Hacks 模拟水题

    Nasty Hacks Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  9. HDOJ 1326. Box of Bricks 纯水题

    Box of Bricks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

随机推荐

  1. C#调试方法

    单步执行 有三种, 一种是每次执行一行(F10): 一种是每次执行一行,但遇到函数调用就会跳到被调用的函数里(F11): 一种是直接执行当前函数里剩下的指令,返回上一级函数(Shift+F11). 还 ...

  2. SQL查询排序某字段并选前N条数据

    看了网上各种乱七八糟的答案,无语. 明明这一句话就行了. select * from personinfo order by credit DESC limit 0,5

  3. PHP设计模式(三)

    注册器模式 这种模式比较简单好理解,在PHP框架中会经常用到,在某些比较大的PHP框架中,会在初始化时将一些常用的类实例放在注册器中,实际是存在注册器类中的一个静态数组中,以后想去用它的话,直接根据名 ...

  4. RBM Formula Deduction

    Energy based Model the probability distribution (softmax function): \[p(x)=\frac{\exp(-E(x))}{\sum\l ...

  5. Linux DHCP通过OPTION43为H3C的AP下发AC地址(总结)

    对于DHCP服务,可以在很多平台上进行设置.那么这里我们就主要讲解一下在Linux DHCP服务器上通过option 43实现H3C的AP自动联系AC注册的相关内容.原来的DHCP Server是放在 ...

  6. iOS - Availability.h

    >for 'dispatch' application inner to begin note `#include <Availability.h>` These macros ar ...

  7. JavaScript中的变量及数据类型

    转自:http://blog.csdn.net/mygis2005/article/details/7375419 JavaScript是一种弱类型的语言,变量名.操作符和方法名都区分大小写. 1.变 ...

  8. php 简单分页类

    /**  file: page.class.php   完美分页类 Page  */ class Page {  private $total;          //数据表中总记录数  privat ...

  9. easyui numberbox一些常用属性,方法

    1.value="1234567.89"//数字框中的值 2.precision:2//精度(小数点后两位) 3.groupSeparator:','//(组分隔符) 4.deci ...

  10. Linux下htop的使用

    linux top命令VIRT,RES,SHR,DATA的含义 第1行-第4行:显示CPU当前的运行负载,有几核就有几行,我的是4核 Mem:显示内存的使用情况,3887M大概是3.8G,此时的Mem ...