hihocoder #1500 : EL SUENO 树DP
来源:互联网 发布:中国电信网络资源管理 编辑:程序博客网 时间:2024/06/14 02:45
#1500 : EL SUENO
- 样例输入
62 1 2 20 4 0 22 0 2 52 0 2 61 0 1 21 0 1 3
- 样例输出
11
描述
In a video game, Little Hi is going to assassinate the leader of an evil group, EL SUENO.
There are N high-value targets in the group, numbered from 1 to N. Each target has another target as his direct superior except for EL SUENO who has no superior. So the superior-subordinate hierarchy forms a tree-like structure. EL SUENO is at the root.
The cost of assassinating the i-th target is Ci. Before assassinating a target Little Hi has to obtain enough information about him. For the i-th target, Little Hi needs INi units of information. By assassinating a target Little Hi will obtain some information about the target's direct superior. More specifically, the i-th target has IPi units of information about his superior. So in order to assassinate EL SUENO, Little Hi needs to assassinate some of his direct subordinates so that the sum of information obtained is enough; assassinating the subordinates needs to assassinate their direct subordinates ... until it reaches some targets require zero information in advance. (Luckily if a target has no subordinate he always requires zero information.)
How Little Hi wants to know what is the minimum cost for successful assassinating EL SUENO.
输入
The first line contains an integer N.
Then follow N lines. Each line describes a target with 4 integers, Fi, INi, IPi, Ci.
Fi is i-th target's superior. For EL SUENO his Fi is zero.
INi is the amount of information needed to assassinate the i-th target. For a target has no subordinates his INi is always zero.
IPi is the amount of information the i-th target has about his superior Fi.
Ci is the cost of assassinating the i-th target.
For 30% of the data, 1 <= N <= 10, 0 <= INi, IPi <= 100
For 60% of the data, 1 <= N <= 100, 0 <= INi, IPi <= 1000
For 100% of the data, 1 <= N <= 2000, 0 <= Fi <= N, 0 <= INi, IPi <= 20000, 1 <= Ci <= 1000.
It is guaranteed that the N targets form a tree structure.
输出
The minimum cost. If Little Hi is not able to assassinate EL SUENO output a number -1.
.
题意:
输入 F,IN,IP,C数组
n个人构成一个树的关系,要杀死第i个人 必须要in[i]的储蓄值,而这个值只能从杀死他的后代来得到,每杀死一个后代,能对其直接祖先贡献IP[i]的储蓄值
恩 还有杀死一个人要额外代价C[i]
最后问你杀死根节点的最小代价是多少
每一层直接做01背包
注意 这个和裸的01背包有点微小的不同是,我们枚举容量j的时候当遇到J<volume[i] 时,也就是放不下了时,我们就可以停止循环了
而在本题中j<ip[i]时,也就是这个人的贡献值超过了所需要的储蓄值时,我们还需要更新答案,这种情况是合法的,仅此不同。
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N=2005;vector<int > mp[N];ll n;ll f[N];ll in[N];ll ip[N];ll c[N];ll dfs(int x){ ll dp[20020]; dp[0]=0; for(int i=1;i<=in[x];i++)dp[i]=1e16; for(int i=0;i<mp[x].size();i++) { int v=mp[x][i]; ll tmp=dfs(v); for(int j=in[x];j>0;j--) dp[j]=min(dp[j],dp[max(j-ip[v],0LL)]+c[v]+tmp); } return dp[in[x]];}int main(){ int n; cin>>n; int root; for(int i=1;i<=n;i++) { cin>>f[i]>>in[i]>>ip[i]>>c[i]; if (!f[i])root=i; mp[f[i]].push_back(i); } ll ans=dfs(root); if (ans>=1e16) cout<<-1<<endl; else cout<<ans+c[root]<<endl; return 0;}
- hihocoder #1500 : EL SUENO 树DP
- 微软2017年预科生计划在线编程笔试第二场-#1500 : EL SUENO
- 【hihocoder】状态压缩dp
- 【DP】 hihocoder #1159 : 扑克牌
- 【DP】 hihocoder #1170 : 机器人
- hihocoder 1243 树形DP
- hihocoder 1259 (数位DP)
- hihocoder 1290 DP
- hihocoder 1044 (状压dp)
- 数字三角形--hihocoder(DP)
- hihocoder 1469 福字 (dp)
- hihoCoder 1044 状压dp
- hihoCoder Demo Day dp
- HihoCoder 1580 RMQ+DP
- HihoCoder 1259 数位DP
- [bfs树 分层图][DP] hihocoder Pro.1147 时空阵
- hihocoder 1044 状态压缩dp
- hihocoder 1157 建造金字塔 (DP)
- window 7下安装scrapy
- light oj 1038
- JVM 虚拟机 精华一页纸
- GUI for git|SourceTree|入门基础
- HDU 1829 A Bug's Life(种类并查集)
- hihocoder #1500 : EL SUENO 树DP
- PHP常用基础函数汇总(可以)
- Mybatis 的分页插件PageHelper-4.1.1的使用
- hdoj-2096-小明A+B(解题报告)
- eclipse源码中配置core
- 使用Task代替ThreadPool和Thread
- java Class和加载机制精华一页纸
- TextView跑马灯的使用简单分析
- Gradle配置