题目大意:

一个国家想贿赂至少m个国家,给出贿赂每个国家需要的钱及他们的附属关系。如果贿赂了主国,其附属国家也同样视为被贿赂了,且保证关系网没环,和一个国家最多只能被一个国家控制。

题目思路:本题要用到树形背包和字符串处理,字符串用普通方法读入特别麻烦且代码繁琐。这里我第一次用到了map:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<map>
using namespace std;
map<string,int>a;//定义map(下标为字符串方便操作)
int u[205],f[205],m[205][205],d[205][205],n,o,t[205];
char h[205],r[205];
int dfs(int x){//深搜int i,j,k;int ans=1;if(x==0)ans=0;if(u[x]==1&&x>0){d[x][0]=0;d[x][1]=f[x];return 1;}for(i=1;i<=n;i++)if(m[x][i]==0)ans+=dfs(i);//将结果相加d[x][0]=0;for(i=1;i<=n;i++){if(m[x][i]==-1) continue;  for(k=n;k>=0;k--)//背包for(j=1;j<=k;j++){if(d[x][k-j]!=-1&& d[i][j]!=-1){if(d[x][k]!=-1)d[x][k]=min(d[x][k],d[x][k-j]+d[i][j]);else d[x][k]=d[x][k-j]+d[i][j];}}} if(d[x][ans]==-1||d[x][ans]>f[x])d[x][ans]=f[x]; return ans;
}
int lily(){//因为有可能是'#'所以字符读入char c=getchar();int s=0;while(c<'0'||c>'9')  {  if(c=='#')return 0;  //当为'#'时返回'0';c=getchar();  }  while(c>='0'&&c<='9')  {  s*=10;  s+=c-'0';  c=getchar();  }  return s;
}
int main(void){int i,j,k,g;char c;while(1){n=lily();//读入nif(n==0)break;//当n为'0'结束scanf("%d",&o);memset(m,-1,sizeof(m));memset(t,0,sizeof(t));getchar();k=1;for(i=1;i<=n;i++){//记录scanf("%s",h);scanf("%d",&g);if(!a[h])a[h]=k++;f[a[h]]=g;u[a[h]]=1;c=getchar();while(c!='\n'){scanf("%s",r);if(!a[r]){a[r]=k++;}m[a[h]][a[r]]=0;t[a[r]]++;u[a[h]]++;c=getchar();}}f[0]=0;u[0]=1;for(i=1;i<=n;i++){if(t[i]==0){m[0][i]=0;u[0]++;f[0]+=f[i];}}memset(d,-1,sizeof(d));  //清空dfs(0);//搜索int max=10000000;for(j=o;j<=n;j++){if(d[0][j]!=-1 &&d[0][j]<max){max=d[0][j];}  }  printf("%d\n",max);//输出a.clear();//清空}return 0;
}

POJ3345 Bribing FIPA(树形DP)相关推荐

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

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

  2. BNUOJ 52305 Around the World 树形dp

    题目链接: https://www.bnuoj.com/v3/problem_show.php?pid=52305 Around the World Time Limit: 20000msMemory ...

  3. [树形dp] Jzoj P5233 概率博弈

    Description 小A和小B在玩游戏.这个游戏是这样的: 有一棵n个点的以1为根的有根树,叶子有权值.假设有m个叶子,那么树上每个叶子的权值序列就是一个1->m 的排列. 一开始在1号点有 ...

  4. fwt优化+树形DP HDU 5909

    1 //fwt优化+树形DP HDU 5909 2 //见官方题解 3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/ 4 5 #include ...

  5. BZOJ 1040 ZJOI2008 骑士 树形DP

    题目大意:给定一个基环树林,每一个点上有权值,要求选择一个权值和最大的点集,要求点集中的随意两个点之间不能直接相连 最大点独立集--考虑到n<=100W,网络流铁定跑不了,于是我们考虑树形DP ...

  6. POJ 3342 树形DP+Hash

    这是很久很久以前做的一道题,可惜当时WA了一页以后放弃了. 今天我又重新捡了起来.(哈哈1A了) 题意: 没有上司的舞会+判重 思路: hash一下+树形DP 题目中给的人名hash到数字,再进行运算 ...

  7. [NC15748]旅游 树形dp基础

    菜鸡第一次接触树形dp这个东西,不过这个东西还是很好理解的(可能是因为模板题吧) 个人感觉,相比线性dp,树形dp的状态转移方程更加的直观,难点主要是在"树"的结构上比较麻烦. 题 ...

  8. 容斥 + 树形dp ---- 2021 icpc 沈阳 L Perfect Matchings

    题目链接 题目大意: 就是给你一个2n2n2n个点的完全图,从这个图里面抽出2n−12n-12n−1条边,这些边形成一颗树,现在问你剩下的图里面点进行完美匹配有多少种方案? 解题思路: 一开始被完美匹 ...

  9. 树形dp ---- gym101667 A(贪心 + 树形dp + 两个dp方程组维护)

    题目链接 题目大意: 就是一棵5e35e35e3的树,可以选择一些点,放上基站,如果uuu上的基站价值为ddd,那么距离uuu小于等于ddd的点都会被覆盖,问使得整棵树被覆盖需要的最小价值. 解题思路 ...

  10. 树形dp ---- 2018年杭电多校第二场 H travel

    题目大意: 就是给你一个带点权的树,找到3条独立互不相交的路径使得权值和最大 解题思路: 很经典的树形dp 我们设dp[root][j][k]dp[root][j][k]dp[root][j][k]表 ...

最新文章

  1. 深度理解目标检测(MMdetection)-HOOK机制
  2. JavaEE(1) - Weblogic 服务器管理的数据源
  3. 学python需要安装什么-初学 Python 需要安装哪些软件?
  4. LinkedHashMap
  5. ofstream写不进txt文件的奇怪问题
  6. gdb调试fork多进程
  7. Mac VSCode配置C语言环境(可以调试)
  8. 骑车与走路(信息学奥赛一本通-T1050)
  9. Python3.x Numpy中的array数组_矩阵操作
  10. Windows Server AppFabric缓存参考实例和方案选择 2/3
  11. Object中的clone方法
  12. ArcGIS API For JavaScript - 地图常用函数方法
  13. c语言的实验,c语言 实验1
  14. 寻找春天nbsp;九宫格日记-2011.11.29
  15. 微软官方地址下载sql 2000简体中文企业版(含SP3 SP4 下载地址)
  16. android webview浏览器下载文件,Android 浏览器 —— 使用 WebView 实现文件下载
  17. vue中对鼠标划过事件处理方式
  18. 树莓派RaspberryPi Zero W 快速安装tips
  19. 【沧小海笔记】之基于FPGA的以太网设计相关知识——第一章 互联网概述
  20. uniapp插件市场-涂图视频编辑-美妆-剪辑-微整形原生sdk插件发布-优雅草科技

热门文章

  1. 笔记:live2d4.0 sdk 博客园网页动画
  2. 我在腾讯看点的导师 Steven
  3. [转帖] 一个老乞丐的一句话,震惊全中国人!
  4. grafana快速搭建数据平台
  5. JAVA中InputStream转base64
  6. 庸人自谈爬虫二三事——兴之所至,心之所安,尽其在我
  7. 按摩椅控制板的开发让按摩椅变得简约智能
  8. 电脑word文档页眉的横线怎么去掉
  9. word打印设置相关
  10. 【树莓派】利用tesseract进行汉字识别