1题目描述很简单。。其实就是求最小点覆盖。。但是。。。他明确说明是树。。如果用矩阵存储。。然后用匈牙利,显然不仅浪费空间。还浪费时间。。TLE了。。。

然后用邻接表。。可以AC了。。。

但是效率还是不高啊。。

这是一道最典型节点覆盖问题,这类可以用树形DP解。

对于顶点i,有两种状态,有士兵,没士兵,将这种状态下以i为根的子树的总士兵数为dp[i][0],dp[i][1]。

显然,如果i点没有士兵,那么它的所有子节点一定要有士兵,否则中间的线不能被覆盖。

所以dp[i][0]=dp[j0][1]+dp[j1][1]+...+dp[jk][1],其中j1,j2,...,jk是i的所有子节点。

如果i点有士兵,那么它的任意子节点都可以有士兵或没有士兵。

所以dp[i][1]=min(dp[j0][0],dp[j0][1])+min(dp[j1][0],dp[j1][1])+...+min(dp[jk][0],dp[jk][1])+1.

对于叶子节点,dp[i][0]=0,dp[i][1]=1

以上就是动态规划的状态转移方程。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<limits.h>
#define MIN(a,b) ((a)<(b)?(a):(b))
#define N 1505
#define M 11
typedef struct
{int sum0,sum1;
}Sum;
Sum save;
typedef struct node
{int count;struct node * next[M];}tree;
Sum dp(tree * root)
{Sum s;int i;s.sum0=0;s.sum1=1;for(i=0;i<root->count;i++){save=dp(root->next[i]);s.sum0+=save.sum1;s.sum1+=MIN(save.sum1,save.sum0);}return s;
}
int main(void)
{int n,a,m,i,j,v;tree t[N],*root;Sum ans;while(scanf("%d",&n)!=EOF){memset(t,0,sizeof(t));root=NULL;for(i=0;i<n;i++){scanf("%d:(%d)",&a,&m);t[a].count=m;if(root==NULL){root=&t[a];}for(j=0;j<m;j++){scanf("%d",&v);t[a].next[j]=&t[v];}}ans=dp(root);printf("%d\n",MIN(ans.sum0,ans.sum1));}return 0;
}

转载于:https://www.cnblogs.com/int32bit/archive/2011/07/29/3187796.html

poj1463 Strategic game相关推荐

  1. [POJ1463] Strategic game

    题目链接: 传送门 题目大意: Bob非常享受玩电脑游戏的过程,尤其是策略游戏,但是在有些时候,他因为不能在第一时间找到最佳的策略而十分伤心. 现在,他遇到了一个问题.他必须保卫一个中世纪的城市,有很 ...

  2. 树形DP入门题目推荐以及解析

    关于树形DP几道入门题目 今天恶补树形DP,感觉海星. 其实挺简单的. 介绍几道例题,我会的. 1.洛谷P1352 没有上司的舞会 我的一篇题解 我们可以考虑每一个节点都是有两种情况. 一个是被邀请: ...

  3. 竞赛程序设计知识要点图谱

    一.基础算法 1.枚举法 POJ1248 Safecracker HDU1172 猜数字 POJ1543 Perfect Cubes POJ1046 Color Me Less 2.递归法:Hanoi ...

  4. Strategic game poj1463

    1463 -- Strategic game 题目大意:树上有n个点,每个点都可以放一枚棋子,每枚棋子可以影响到监管相邻的格子,问要使每个格子都受监管,最少需要多少棋子 1<=n<=150 ...

  5. HDU——1054 Strategic Game

    Strategic Game Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  6. Strategic game(树的最小点覆盖)

    Strategic game 题意: 一个树,在一个节点放兵,周围的边就被守护,守护所有的边,问最少放多少兵 题解: 这种问题又称树的最小点覆盖 dp[x][1]以x为根的子树全被看住且在x上放置士兵 ...

  7. 【POJ - 1463】Strategic game (树上最小点覆盖,树形dp)

    题干: Bob enjoys playing computer games, especially strategic games, but sometimes he cannot find the ...

  8. UVA497 Strategic Defense Initiative【LIS+DP】

    "Commander! Commander! Please wake up commander!"     "- mmmph. What time is it?" ...

  9. 【论】Strategic sourcing selection for bike-sharing rebalancing: An evolutionary game approach

    Strategic sourcing selection for bike-sharing rebalancing: An evolutionary game approach 作者:Wei Gu , ...

最新文章

  1. win10如何查看NVIDIA驱动的版本
  2. 修改python编码
  3. 存储ic载板_【热点】深南电路:通讯PCB维持增长 IC载板打造成长新核心
  4. MM模块部分名词解释
  5. Python项目打包发布到pypi
  6. yandex禁止java script_Yandex最新版本浏览器新标签页按钮显示俄文的解决办法
  7. 【Python爬虫】爬虫程序的简单处理过程
  8. Autodesk Flame 2022 for Mac - 高级三维视觉特效合成软件
  9. linux 内存泄露检测工具——valgrind
  10. 添加源代码到你的sdk中
  11. java 算法递归案例_JAVA 几个递归算法实例
  12. PM_我们是怎么做Code Review的
  13. Java连接各种数据库
  14. 插个队 leetcode 142. 环形链表 II
  15. 华为4g显示无服务器,华为nova5 插卡无4G
  16. excel-LOOKUP函数多条件查找
  17. MySQL讲义第 40 讲——select 查询之函数(3):数学函数
  18. 提完离职领导给涨薪了,走还是不走?
  19. 沈阳建筑学计算机专硕调剂,沈阳建筑大学2020考研网上调剂公告
  20. apache2日志分析软件linux,apache日志分析工具安装

热门文章

  1. 流计算程序不报错,但是没有输出的一些原因(持续更新中)
  2. 'Request' object has no attribute 'META'报错解决
  3. 数据建模中的大坑判断
  4. 计算机组成要素六:编译器 语法分析器
  5. java登录界面_java实现登陆页面
  6. 小车手app安卓版下载_古筝大师app下载-古筝大师下载v2.1.2 安卓版
  7. Oracle报错:类型长度大于最大值解决办法
  8. IMYAOPTableView 源码学习笔记
  9. i/o传输数据打印换行符的方法
  10. 图形系统中的仿射变换