POJ3345 Bribing FIPA 【背包类树形dp】
题目链接
题解
背包树形dp板题
就是读入有点无聊,浪费了很多青春
#include<iostream>
#include<cstdio>
#include<cmath>
#include<map>
#include<string>
#include<cstring>
#include<algorithm>
#define LL long long int
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define cls(s) memset(s,0,sizeof(s))
using namespace std;
const int maxn = 205,maxm = 50005,INF = 1000000000;
map<string,int> id;
int ls[maxn],rb[maxn],n,m,siz[maxn],fa[maxn],rt;
char s[maxm],name[maxn];
LL f[maxn][maxn],val[maxn];
void dfs(int u){
f[u][0] = 0; siz[u] = 1;
for (int k = ls[u]; k; k = rb[k]){
dfs(k); siz[u] += siz[k];
for (int i = n; i >= 0; i--)
for (int j = 0; j <= i; j++)
f[u][i] = min(f[u][i],f[u][i - j] + f[k][j]);
}
if (u != rt) f[u][siz[u]] = min(f[u][siz[u]],val[u]);
}
int main(){
int idx,x;
while(scanf("%s",s) > 0 && strcmp(s,"#") != 0){
id.clear(); idx = 0;
cls(fa); cls(rb); cls(ls); memset(f,0x3f3f3f3f,sizeof(f));
scanf("%d",&m); n = 0;
for(int i = 0; s[i] != '\0'; i++)
n = n * 10 + s[i] - '0';
rt = n + 1;
REP(i,n){
scanf("%s%d",name,&x);
if (id[name] == 0) id[name] = ++idx;
int u = id[name],to; val[u] = x;
while (getchar() != '\n'){
scanf("%s",name);
if (id[name] == 0) id[name] = ++idx;
to = id[name];
rb[to] = ls[u];
ls[u] = to;
fa[to] = u;
}
}
REP(i,n) if (!fa[i]){
fa[i] = rt;
rb[i] = ls[rt];
ls[rt] = i;
}
dfs(rt);
LL ans = f[rt][m];
for (int i = m + 1; i <= n; i++) ans = min(ans,f[rt][i]);
cout << ans << endl;
}
return 0;
}
POJ3345 Bribing FIPA 【背包类树形dp】的更多相关文章
- poj3345 Bribing FIPA【树形DP】【背包】
Bribing FIPA Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5910 Accepted: 1850 Desc ...
- POJ3345 Bribing FIPA(树形DP)
题意:有n个国家,贿赂它们都需要一定的代价,一个国家被贿赂了从属这个国家的国家也相当于被贿赂了,问贿赂至少k个国家的最少代价. 这些国家的从属关系形成一个森林,加个超级根连接,就是一棵树了,考虑用DP ...
- POJ3345 Bribing FIPA
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5021 Accepted: 1574 Description There ...
- 洛谷$2014$ 选课 背包类树形$DP$
luogu Sol 阶段和状态都是树形DP板子题,这里只讲一下背包的部分(转移)叭 它其实是一个分组背包模型,具体理解如下: 对于一个结点x,它由它的子结点y转移而来 在子结点y为根的树中可以选不同数 ...
- CTSC1998 选课(背包类树形Dp)
题意: 给出 n 节课的先修课号以及学分(先修课号指的是在学习某节课时先需要学习的课程),求学 m 节课的最大学分. 细节: 1.对于课程 a 其先修课号为 b ,对于课程 b 其先修课号为 c ,则 ...
- luogu2014 选课 背包类树形DP
题目大意:有N门功课,每门课有个学分,每门课有一门或没有直接先修课(若课程a是课程b的先修课即只有学完了课程a,才能学习课程b).一个学生要从这些课程里选择M门课程学习,问他能获得的最大学分是多少? ...
- BZOJ5314 [Jsoi2018]潜入行动 【背包类树形dp】
题目链接 BZOJ5314 题解 设\(f[i][j][0|1][0|1]\)表示\(i\)为根的子树,用了\(j\)个监测器,\(i\)节点是否被控制,\(i\)节点是否放置的方案数 然后转移即可 ...
- CH5402 选课【树形DP】【背包】
5402 选课 0x50「动态规划」例题 描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了 N(N≤300) 门的选修课程,每个学生可选课程的数量 M 是 ...
- 「算法笔记」树形 DP
一.树形 DP 基础 又是一篇鸽了好久的文章--以下面这道题为例,介绍一下树形 DP 的一般过程. POJ 2342 Anniversary party 题目大意:有一家公司要举行一个聚会,一共有 \ ...
随机推荐
- 洛谷P1762 偶数(找规律)
题目描述 给定一个正整数n,请输出杨辉三角形前n行的偶数个数对1000003取模后的结果. 输入输出格式 输入格式: 一个数 输出格式: 结果 输入输出样例 输入样例#1: 复制 6 输出样例#1: ...
- IO流的应用_Copy文件
IO流的应用_Copy文件 (1) import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundEx ...
- 用python画小猪佩奇(非原创)
略作改动: # coding:utf-8 import turtle as t t.screensize(400, 300, "blue") t.pensize(4) # 设置画笔 ...
- LVM(扩展)
LVM(扩展)======================== [root@aminglinux newdir]# fdisk -l /dev/sdb 磁盘 /dev/sdb:10.7 GB, 107 ...
- [Azure Storage]使用Java上传文件到Storage并生成SAS签名
Azure官网提供了比较详细的文档,您可以参考:https://azure.microsoft.com/en-us/documentation/articles/storage-java-how-to ...
- 20145202马超《java程序设计》第一周学习总结
这两天的学习让我对java有了初步的了解. 1.java是SUN公司推出的面相网络的编程语言. 特点:完全面向对象,与平台无关,跨平台性(例如c++只能在windows上执行,然而java并没有这些限 ...
- CSS3---混合模式
概念 CSS3混合模式( CSS Blend Modes )是CSS3新增的一个魔法特性,可以允许多个背景或多个元素进行混合,类似于Photoshop的图层混合模式 CSS3混合模式属性一览 ba ...
- 2 实现第一个Django网站 博客
-1.理解上下文 render()渲染 request url传来的reuqest x.html 制定返回的模板名称 context 上下文 数据库中 替换数据 0.大框架 1.创建模板 (1 ...
- Visual Studio 2017 的 JavaScript 调试功能的关闭
关闭方法其实很简单,Options => Debugging => General => Enable JavaScript debugging for ASP.NET (Chrom ...
- linux文件上传下载笔记(rz,sz,sftp,scp)命令
软件(包)安装/卸载 yum -y install 包名(支持*) :自动选择y,全自动yum install 包名(支持*) :手动选择y or nyum remove 包名(不支持*)rpm -i ...