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 ...
随机推荐
- 在DDwrt下对Firmware操作的一些技巧
[备注]这里是对ddwrt的操作,事实上,对openwrt同样也适用. 基础知识: 1.MTD MTD是Memory Technology Devices的缩写,它主要提供了一个raw Flash设备 ...
- 事务块TransactionScope使用
TransactionScope 可以让代码块成为事务性代码块. 当发生异常时,会自动回滚.后期手动提交事务. 简单的例子: using (TransactionScope ts = new Tran ...
- POJ 2785 4 Values whose Sum is 0(想法题)
传送门 4 Values whose Sum is 0 Time Limit: 15000MS Memory Limit: 228000K Total Submissions: 20334 A ...
- jboss jms 实例
最近温习了下EJB和JMS,整理了下思路,和大家分享下P2P和Pub/Sub的demo :JBoss 7 集成了HornetQ,JMS可以在HornetQ中间件运行,有时间在和大家分享关于Horn ...
- Struts学习总结-02 类型转换
一 类型转换 input.jsp <%@ page language="java" import="java.util.*" pageEncoding=& ...
- JavaWeb---总结(九)通过Servlet生成验证码图片
一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 1 package gacl. ...
- git push to nas
1 建nas目录 在nas的/volume1/git_repos目录下新建相关的目录,并在该目录下运行git init --bare cd /volume1/git_repos mkdir wifi_ ...
- scrapy3_ 安装指南
安装指南 安装Scrapy 注解 请先阅读 平台安装指南. 下列的安装步骤假定您已经安装好下列程序: Python 2.7 Python Package: pip and setuptools. 现在 ...
- Java数据结构与排序算法——堆和堆排序
//================================================= // File Name : Heap_demo //--------------------- ...
- Nginx环境下http和https可同时访问方法
给nginx配置SSL证书之后,https可以正常访问,http访问显示400错误,nginx的配置如下: server { listen 80 default backlog=2048; liste ...