POJ 3345 Bribing FIPA 树形DP
题目链接: POJ 3345 Bribing FIPA
题意:
一个国家要参加一个国际组织, 需要n个国家投票, n个国家中有控制和被控制的关系, 形成了一颗树.
比如: 国家C被国家B控制, 国家B被国家A控制, 那么B , C 会跟着A投同一家国家. 而要有些国家给它投票,
就得用若干钻石去贿赂那些国家. 最后问, 要到至少有m个国家投它的票, 最少需要多少钻石.
分析: 对于每一个结点只有两种状态, 选与不选, 所以dp方程里加上一维即可.
dp[i][j][k], 表示在i的子结点中,选j个最少需要的钻石数, 另k=1表示选i本身,k=0表示不选
dp[cnt][j+k][0] = min( dp[cnt][j+k][0], dp[cnt][j][0] + min(dp[son][k][0],dp[son][k][1]) );
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<vector>
#include<map>
using namespace std;
const int inf=0xFFFFFFF;
vector<string>N[205];
vector<int>M[205];
map<string,int>Map;
int h[205],dp[205][205][2]; /// dp[i][j][k] k=0表示不选i,反之则选
int n,m;
void Init(){
for(int i=0;i<=n;++i){
N[i].clear();
M[i].clear();
for(int j=0;j<=n;++j)
dp[i][j][1]=dp[i][j][0]=inf;
}
memset(h,0,sizeof(h));
}
void DFS(int cnt){
int len=M[cnt].size();
h[cnt]=len;
for(int i=0;i<len;++i)
DFS(M[cnt][i]),h[cnt]+=h[M[cnt][i]];
for(int i=2;i<=min(m,h[cnt])+1;++i)
dp[cnt][i][1]=dp[cnt][1][1]; ///贿赂了cnt,就不用贿赂它的子结点
dp[cnt][0][0]=0;
for(int i=0;i<len;++i){
int son=M[cnt][i];
for(int j=m; j>=0; --j)
for(int k=m-j; k>=0; --k)
dp[cnt][j+k][0]=min(dp[cnt][j+k][0],dp[cnt][j][0]+min(dp[son][k][0],dp[son][k][1]));
}
}
int main(){
while(cin>>n>>m){
Init();
for(int i=1;i<=n;++i){
string s; cin>>s>>dp[i][1][1];
Map[s]=i;
char c; scanf("%c",&c);
while(c!='\n'){
cin>>s;
N[i].push_back(s);
scanf("%c",&c);
}
}
for(int i=1;i<=n;++i){
int len=N[i].size();
for(int j=0;j<len;++j){
string s=N[i][j];
M[i].push_back(Map[s]);
h[Map[s]]=1;
}
}
for(int i=1;i<=n;++i)
if(h[i]==0) M[0].push_back(i);
memset(h,0,sizeof(h));
DFS(0);
cout<<min(dp[0][m][1],dp[0][m][0])<<endl;
}
return 0;
} /* 7 3
A 7 B C
B 5 D E
C 6 F G
D 1
E 2
F 3
G 4 5
*/
POJ 3345 Bribing FIPA 树形DP的更多相关文章
- poj 3345 Bribing FIPA (树形背包dp | 输入坑)
题目链接: poj-3345 hdu-2415 题意 有n个国家,你要获取m个国家的支持,获取第i个国家的支持就要给cost[i]的价钱 其中有一些国家是老大和小弟的关系,也就是说,如果你获 ...
- [POJ 3345] Bribing FIPA
[题目链接] http://poj.org/problem?id=3345 [算法] 树形背包 [代码] #include <algorithm> #include <bitset& ...
- poj 2324 Anniversary party(树形DP)
/*poj 2324 Anniversary party(树形DP) ---用dp[i][1]表示以i为根的子树节点i要去的最大欢乐值,用dp[i][0]表示以i为根节点的子树i不去时的最大欢乐值, ...
- POJ 3162.Walking Race 树形dp 树的直径
Walking Race Time Limit: 10000MS Memory Limit: 131072K Total Submissions: 4123 Accepted: 1029 Ca ...
- POJ 1655.Balancing Act 树形dp 树的重心
Balancing Act Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14550 Accepted: 6173 De ...
- POJ 2342 - Anniversary party - [树形DP]
题目链接:http://poj.org/problem?id=2342 Description There is going to be a party to celebrate the 80-th ...
- POJ - 3162 Walking Race 树形dp 单调队列
POJ - 3162Walking Race 题目大意:有n个训练点,第i天就选择第i个训练点为起点跑到最远距离的点,然后连续的几天里如果最远距离的最大值和最小值的差距不超过m就可以作为观测区间,问这 ...
- POJ 2486 Apple Tree(树形DP)
题目链接 树形DP很弱啊,开始看题,觉得貌似挺简单的,然后发现貌似还可以往回走...然后就不知道怎么做了... 看看了题解http://www.cnblogs.com/wuyiqi/archive/2 ...
- POJ 3162 Walking Race 树形DP+线段树
给出一棵树,编号为1~n,给出数m 漂亮mm连续n天锻炼身体,每天会以节点i为起点,走到离i最远距离的节点 走了n天之后,mm想到知道自己这n天的锻炼效果 于是mm把这n天每一天走的距离记录在一起,成 ...
随机推荐
- Java 线程 — JMM Java内存模型
JMM Java Memory Model,Java内存模型,属于语言级的内存模型 并发编程中存在的问题: 如何通信:用于线程之间交换信息.两种方式:共享内存,消息传递 如何同步:用于控制不同线程间操 ...
- Node + Express + Mysql的CMS小结
因为之前用过上述的组合完成过很多系统,而这一次是为了实现一个帮助系统的静态网页发布.因为很久不写,重点说遇到的几个坑: 1.库版本的问题 比如mysql连接数据库一直报错,因为系统重装过,所以重新安装 ...
- vertex compression所遇到的问题
对于数据压缩,其实就是把浮点的32位精度,改用16位定点数来表达. 例如0.0 = 0,1.0 = 32767,-1.0 = -32767 这是一种有损压缩,会丢失一些精度,一般情况下是可以接受的. ...
- Hadoop学习篇1 快速入门
Hadoop是Apache Lucene创始人Doug Cutting创建的,Hadoop起源于Apache Nutch,一个开源的网络搜索引擎.最先引起注意是2003年google的一篇论文,该论文 ...
- U盘安装ubuntu,一直提示start booting from usb device…[转]
找到U盘中syslinux文件夹下的syslinux.cfg文件,在default vesamenu.c32前面加一个#号就可以了. 我的syslinux.cfg文件修改后如下,够简单吧!!!!建议用 ...
- 从零开始--系统深入学习IOS(使用Swift---带链接)
这是一篇面向IOS新手的文档.同时提供一些系统知识的链接,让你系统学习IOS.它提供一些信息帮助你采用技术和编程接口来开发苹果软件产品,本人不保证会在将来更新.学习它,需要你掌握一些基本的编程知识 1 ...
- 查看mysql版本的四种方法
1:在终端下:mysql -V. 以下是代码片段: [shengting@login ~]$ mysql -V mysql Ver 14.7 Distrib 4.1.10a, for redhat-l ...
- Activemq消息持久化
官方文档: http://activemq.apache.org/persistence.html ActiveMq持久化相关配置:/usr/local/apache-activemq-5.11.1/ ...
- android:style.xml
<?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2006 The Andr ...
- 多线程socket编程示例
工程: 代码: package com.my.socket.business; /** * 业务实现类 * * @author ZY * */ public class CoreMisBusiness ...