poj1463 Strategic game
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相关推荐
- [POJ1463] Strategic game
题目链接: 传送门 题目大意: Bob非常享受玩电脑游戏的过程,尤其是策略游戏,但是在有些时候,他因为不能在第一时间找到最佳的策略而十分伤心. 现在,他遇到了一个问题.他必须保卫一个中世纪的城市,有很 ...
- 树形DP入门题目推荐以及解析
关于树形DP几道入门题目 今天恶补树形DP,感觉海星. 其实挺简单的. 介绍几道例题,我会的. 1.洛谷P1352 没有上司的舞会 我的一篇题解 我们可以考虑每一个节点都是有两种情况. 一个是被邀请: ...
- 竞赛程序设计知识要点图谱
一.基础算法 1.枚举法 POJ1248 Safecracker HDU1172 猜数字 POJ1543 Perfect Cubes POJ1046 Color Me Less 2.递归法:Hanoi ...
- Strategic game poj1463
1463 -- Strategic game 题目大意:树上有n个点,每个点都可以放一枚棋子,每枚棋子可以影响到监管相邻的格子,问要使每个格子都受监管,最少需要多少棋子 1<=n<=150 ...
- HDU——1054 Strategic Game
Strategic Game Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Strategic game(树的最小点覆盖)
Strategic game 题意: 一个树,在一个节点放兵,周围的边就被守护,守护所有的边,问最少放多少兵 题解: 这种问题又称树的最小点覆盖 dp[x][1]以x为根的子树全被看住且在x上放置士兵 ...
- 【POJ - 1463】Strategic game (树上最小点覆盖,树形dp)
题干: Bob enjoys playing computer games, especially strategic games, but sometimes he cannot find the ...
- UVA497 Strategic Defense Initiative【LIS+DP】
"Commander! Commander! Please wake up commander!" "- mmmph. What time is it?" ...
- 【论】Strategic sourcing selection for bike-sharing rebalancing: An evolutionary game approach
Strategic sourcing selection for bike-sharing rebalancing: An evolutionary game approach 作者:Wei Gu , ...
最新文章
- win10如何查看NVIDIA驱动的版本
- 修改python编码
- 存储ic载板_【热点】深南电路:通讯PCB维持增长 IC载板打造成长新核心
- MM模块部分名词解释
- Python项目打包发布到pypi
- yandex禁止java script_Yandex最新版本浏览器新标签页按钮显示俄文的解决办法
- 【Python爬虫】爬虫程序的简单处理过程
- Autodesk Flame 2022 for Mac - 高级三维视觉特效合成软件
- linux 内存泄露检测工具——valgrind
- 添加源代码到你的sdk中
- java 算法递归案例_JAVA 几个递归算法实例
- PM_我们是怎么做Code Review的
- Java连接各种数据库
- 插个队 leetcode 142. 环形链表 II
- 华为4g显示无服务器,华为nova5 插卡无4G
- excel-LOOKUP函数多条件查找
- MySQL讲义第 40 讲——select 查询之函数(3):数学函数
- 提完离职领导给涨薪了,走还是不走?
- 沈阳建筑学计算机专硕调剂,沈阳建筑大学2020考研网上调剂公告
- apache2日志分析软件linux,apache日志分析工具安装