题目链接

POJ

题解

背包树形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】的更多相关文章

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

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

  2. POJ3345 Bribing FIPA(树形DP)

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

  3. POJ3345 Bribing FIPA

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

  4. 洛谷$2014$ 选课 背包类树形$DP$

    luogu Sol 阶段和状态都是树形DP板子题,这里只讲一下背包的部分(转移)叭 它其实是一个分组背包模型,具体理解如下: 对于一个结点x,它由它的子结点y转移而来 在子结点y为根的树中可以选不同数 ...

  5. CTSC1998 选课(背包类树形Dp)

    题意: 给出 n 节课的先修课号以及学分(先修课号指的是在学习某节课时先需要学习的课程),求学 m 节课的最大学分. 细节: 1.对于课程 a 其先修课号为 b ,对于课程 b 其先修课号为 c ,则 ...

  6. luogu2014 选课 背包类树形DP

    题目大意:有N门功课,每门课有个学分,每门课有一门或没有直接先修课(若课程a是课程b的先修课即只有学完了课程a,才能学习课程b).一个学生要从这些课程里选择M门课程学习,问他能获得的最大学分是多少? ...

  7. BZOJ5314 [Jsoi2018]潜入行动 【背包类树形dp】

    题目链接 BZOJ5314 题解 设\(f[i][j][0|1][0|1]\)表示\(i\)为根的子树,用了\(j\)个监测器,\(i\)节点是否被控制,\(i\)节点是否放置的方案数 然后转移即可 ...

  8. CH5402 选课【树形DP】【背包】

    5402 选课 0x50「动态规划」例题 描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了 N(N≤300) 门的选修课程,每个学生可选课程的数量 M 是 ...

  9. 「算法笔记」树形 DP

    一.树形 DP 基础 又是一篇鸽了好久的文章--以下面这道题为例,介绍一下树形 DP 的一般过程. POJ 2342 Anniversary party 题目大意:有一家公司要举行一个聚会,一共有 \ ...

随机推荐

  1. Redis 4.0 从节点写入不同步问题

    redis4.0出现了很多新的特性,删除键值unlink,slowlog记录来源ip.内存统计信息等.其中一个重要的同步祭祀是Psync2.psync2主要让redis在从实例重启和主实例故障切换场景 ...

  2. mysql基础,索引

  3. linux 基本命令笔记

    nohup [process]  & 后台挂起命令nohup 挂起& 后台运行 python3 manage.py runserver 0.0.0.0:8080 python -r 递 ...

  4. FastDFS文件管理系统

    一.FastDFS介绍 FastDFS 是一个开源的高性能分布式文件系统(DFS). 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡.主要解决了海量数据存储问题,特别适合以中小文 ...

  5. struts2属性驱动模型

    属性驱动模型的作用: 因为struts2与servlet API 实现了解耦,无法直接使用HttpServlet Request对象获取表单提交的参数,但Struts2提供了属性驱动模型机制来解决这个 ...

  6. table选项卡

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  7. Python学习-django-Model操作

    Django之Model操作   一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bi ...

  8. 指定的参数已超出有效值的范围。 参数名: site

    “/”应用程序中的服务器错误. 指定的参数已超出有效值的范围.参数名: site 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的 ...

  9. C语言字符篇(三)字符串比较函数

    #include <string.h>   int strcmp(const char *s1, const char *s2); 比较字符串s1和s2 int strncmp(const ...

  10. 笔记-git-.gitignore

    笔记-git-.gitignore 1.      git忽略文件 有的文件不需要提交到公共仓库中,为此git提供了三种实现方式. gitignore文件 在项目的设置中指定排除文件 定义全局.git ...