[题目链接]

http://poj.org/problem?id=3345

[算法]

树形背包

[代码]

#include <algorithm>
#include <bitset>
#include <cctype>
#include <cerrno>
#include <clocale>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <limits>
#include <list>
#include <map>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <utility>
#include <vector>
#include <cwchar>
#include <cwctype>
#include <stack>
#include <limits.h>
using namespace std;
#define MAXN 210
const int INF = 2e9; int i,j,k,root,n,m,tot,u,v,x,ans;
int size[MAXN],fa[MAXN],val[MAXN];
int f[MAXN][MAXN];
char s[MAXN];
map< string,int > mp;
vector< int > e[MAXN]; inline void dp(int u)
{
int i,j,k,v;
f[u][] = ;
size[u] = ;
for (i = ; i < (int)e[u].size(); i++)
{
v = e[u][i];
dp(v);
size[u] += size[v];
for (j = size[u]; j >= ; j--)
{
for (k = ; k <= size[v]; k++)
{
f[u][j] = min(f[u][j],f[u][j - k] + f[v][k]);
}
}
}
if (u != root) f[u][size[u]] = min(f[u][size[u]],val[u]);
} int main()
{ while (scanf("%s",&s) != EOF && strcmp(s,"#") != )
{
scanf("%d",&m);
n = ;
for (i = ; s[i] != '\0'; i++) n = n * + s[i] - '';
tot = ;
mp.clear();
memset(val,,sizeof(val));
memset(fa,,sizeof(fa));
for (i = ; i <= n; i++) e[i].clear();
for (i = ; i <= n; i++)
{
scanf("%s%d",&s,&x);
if (!mp[s]) mp[s] = ++tot;
u = mp[s];
val[u] = x;
while (getchar() != '\n')
{
scanf("%s",&s);
if (!mp[s]) mp[s] = ++tot;
v = mp[s];
e[u].push_back(v);
fa[v] = u;
}
}
root = ;
for (i = ; i <= n; i++)
{
if (!fa[i])
e[root].push_back(i);
}
memset(size,,sizeof(size));
memset(f,0x3f,sizeof(f));
dp(root);
ans = INF;
for (i = m; i <= n; i++) ans = min(ans,f[][i]);
printf("%d\n",ans);
} return ; }

[POJ 3345] Bribing FIPA的更多相关文章

  1. POJ 3345 Bribing FIPA 树形DP

    题目链接: POJ 3345 Bribing FIPA 题意: 一个国家要参加一个国际组织,  需要n个国家投票,  n个国家中有控制和被控制的关系, 形成了一颗树. 比如: 国家C被国家B控制, 国 ...

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

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

  3. poj3345 Bribing FIPA【树形DP】【背包】

    Bribing FIPA Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5910   Accepted: 1850 Desc ...

  4. HDU 2415 Bribing FIPA

    Bribing FIPA Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original I ...

  5. Bribing FIPA

    Bribing FIPA 给出多棵有n个节点的有根树,第i个节点有一个权值\(a_i\),定义一个点能控制的点为其所有的子节点和它自己,询问选出若干个点的最少的权值之和,并且能够控制大于等于m个点,\ ...

  6. POJ3345 Bribing FIPA

    Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5021   Accepted: 1574 Description There ...

  7. POJ3345 Bribing FIPA 【背包类树形dp】

    题目链接 POJ 题解 背包树形dp板题 就是读入有点无聊,浪费了很多青春 #include<iostream> #include<cstdio> #include<cm ...

  8. poj 3345 树形DP 附属关系+输入输出(好题)

    题目连接:http://acm.hust.edu.cn/vjudge/problem/17665 参考资料:http://blog.csdn.net/woshi250hua/article/detai ...

  9. POJ3345 Bribing FIPA(树形DP)

    题意:有n个国家,贿赂它们都需要一定的代价,一个国家被贿赂了从属这个国家的国家也相当于被贿赂了,问贿赂至少k个国家的最少代价. 这些国家的从属关系形成一个森林,加个超级根连接,就是一棵树了,考虑用DP ...

随机推荐

  1. 前端-Vue结构思维导图笔记

    看不清的朋友右键保存或者新窗口打开哦!喜欢我可以关注我,还有更多前端思维导图笔记有vue结构分析,JS基础,JQ,JS高级,Angular,git等等

  2. vim之快速跳转

    光棍节啦, 淘东西的闲暇上来发vim旅途第一篇日志. 为什么呢? 因为今天是我媳妇的生日, 我用这种只有我知道的方式来纪念一下. ^_^, 宝宝生日快乐! 开篇先说明日志布局, vim学习记录连载中所 ...

  3. SLAM:ORB-SLAM 位姿优化描述

    只知道算法描述和代码,而不知道原理是比较扯的事情,还是把原理转载一下. 原文链接: http://www.cnblogs.com/luyb/p/5447497.html ORB-SLAM作为单目SLA ...

  4. POJ_1061_扩展欧几里德

    青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 107027   Accepted: 21321 Descript ...

  5. HTML编辑器ASP.NET

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="kindeditor.aspx. ...

  6. 一个休假申请页对input标签各种属性的用法案例(手机端)

    <%@ page language="java" import="java.util.*" contentType="text/html; ch ...

  7. (C/C++学习)2.C语言中文件流操作基本函数总结

    函数所在头文件:stdio.h 说明:前半部分主要为对各个文件流操作函数的例举,后半部分着重于上机运行分析.文中部分引用自王桂林老师的C/C++课件. 1.FIELE *fopen(const cha ...

  8. Java异常以及继承的一些问题

    Java异常以及继承的一些问题 http://blog.csdn.net/hguisu/article/details/6155636 https://www.cnblogs.com/skywang1 ...

  9. Linux—Ubuntu14.0.5 修改gitlab管理员的密码

    1. 在root用户下,执行 gitlab-rails console production #进入gitlba控制台 2.获得用户数据,修改用户密码 [root@svr34 bin]# gitlab ...

  10. redhat超级用户密码破解

    1. 开机在出现grub画面,按e键 2. 用上下键选中第二项(类似于kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/) 然后按e键编辑 3. 空格sing ...