题目链接: 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的更多相关文章

  1. poj 3345 Bribing FIPA (树形背包dp | 输入坑)

    题目链接:  poj-3345  hdu-2415 题意 有n个国家,你要获取m个国家的支持,获取第i个国家的支持就要给cost[i]的价钱    其中有一些国家是老大和小弟的关系,也就是说,如果你获 ...

  2. [POJ 3345] Bribing FIPA

    [题目链接] http://poj.org/problem?id=3345 [算法] 树形背包 [代码] #include <algorithm> #include <bitset& ...

  3. poj 2324 Anniversary party(树形DP)

    /*poj 2324 Anniversary party(树形DP) ---用dp[i][1]表示以i为根的子树节点i要去的最大欢乐值,用dp[i][0]表示以i为根节点的子树i不去时的最大欢乐值, ...

  4. POJ 3162.Walking Race 树形dp 树的直径

    Walking Race Time Limit: 10000MS   Memory Limit: 131072K Total Submissions: 4123   Accepted: 1029 Ca ...

  5. POJ 1655.Balancing Act 树形dp 树的重心

    Balancing Act Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14550   Accepted: 6173 De ...

  6. POJ 2342 - Anniversary party - [树形DP]

    题目链接:http://poj.org/problem?id=2342 Description There is going to be a party to celebrate the 80-th ...

  7. POJ - 3162 Walking Race 树形dp 单调队列

    POJ - 3162Walking Race 题目大意:有n个训练点,第i天就选择第i个训练点为起点跑到最远距离的点,然后连续的几天里如果最远距离的最大值和最小值的差距不超过m就可以作为观测区间,问这 ...

  8. POJ 2486 Apple Tree(树形DP)

    题目链接 树形DP很弱啊,开始看题,觉得貌似挺简单的,然后发现貌似还可以往回走...然后就不知道怎么做了... 看看了题解http://www.cnblogs.com/wuyiqi/archive/2 ...

  9. POJ 3162 Walking Race 树形DP+线段树

    给出一棵树,编号为1~n,给出数m 漂亮mm连续n天锻炼身体,每天会以节点i为起点,走到离i最远距离的节点 走了n天之后,mm想到知道自己这n天的锻炼效果 于是mm把这n天每一天走的距离记录在一起,成 ...

随机推荐

  1. jquery-drawsvg — HTML5轻量级插件

    在html5中,有许多插件,今天小编就为大家分享众多插件中的jquery-drawsvg插件. jquery-drawsvg是什么插件呢?其实,jquery-drawsvg是一款轻量级的使用jQuer ...

  2. 一個小技巧讓ipad或iphone的瀏覽器也能開啟firebug

    首先複製這一段代碼 javascript:(function(F,i,r,e,b,u,g,L,I,T,E){if(F.getElementById(b))return;E=F[i+'NS']& ...

  3. Bitmap和Drawable相互转换方法

    很多开发者表示,不知道Android的Drawable和Bitmap之间如何相关转换.下面给大家两种比较简单高效的方法. 一.Bitmap转Drawable Bitmap bm=xxx; //xxx根 ...

  4. 【转】Xcode概览(Xcode 6版):循序渐进认识Xcode

    该系列文章翻译自苹果的Xcode Overview文档,对大部分开发者来说,已经非常熟悉Xcode的功能和特性,不过伴随着iOS 8 SDK的发布,Xcode 6中也有些许调整,所以对该文档进行了翻译 ...

  5. Android——BitMap(位图)相关知识总结贴

    Android中文API(136) —— Bitmap http://www.apkbus.com/android-54644-1-1.html Android 4.0 r1 API—Bitmap(S ...

  6. C++ Data Member内存布局

    如果一个类只定义了类名,没定义任何方法和字段,如class A{};那么class A的每个实例占用1个字节的内存,编译器会会在这个其实例中安插一个char,以保证每个A实例在内存中有唯一的地址,如A ...

  7. Android系列--DOM、SAX、Pull解析XML

    您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...

  8. Windows 系统下设置Nodejs NPM全局路径

    Windows下的Nodejs npm路径是appdata,很不爽,想改回来,但是在cmd下执行以下命令也无效 npm config set cache "D:\nodejs\node_ca ...

  9. Halcon标定步骤

    Halcon标定步骤 1.设置相机内部参数的初始值 StartCamPar := [0.016,0,0.0000074,0.0000074,326,247,652,494]set_calib_data ...

  10. PMBOK/CMM/CMMI/OPM3

    1968年为了解决大型软件项目的软件危机,北大西洋公约组织(NATO)提出了“软件工程”这一术语,以改进软件开发设计过程. 1969年美国项目管理协会(PMI)组织成立,从1981年起经过30年的努力 ...