随笔分类 - hdoj‘
hdoj 4081 Qin Shi Huang's National Road System
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4081解题报告:先求最小生成树,并把这棵树记录下来,用low,和pre数组然后dp数组表示最大边,这个信息可以在求prim的时候得到。然后不断枚举任意两点修魔法路。那么这条路可能在最小生成树上,或者不在。如果不在则替换到这两点之间的在mst上的最长路。dp数组如果在咋直接替换到mst上的路 也是dp数组View Code #include<iostream>#include<string.h>#include<stdio.h>#include<algorithm>
阅读全文
hdoj 4417 Super Mario
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4417你妹妹的 cin cout scanf printf.是差了好远呀,cin cout 会wa但scanf printf就ac了。。了解了eaual_range()的神奇操作。。做法就是线段树,vector很强大。。View Code #include<iostream>#include<cstdio>#include<algorithm>#include<vector>#define lson l,m,root<<1#define rson m
阅读全文
hdoj 4414 Finding crosses
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4414sb题啊,我wa了好久,你妹妹。。就是暴力枚举,然后我的方法是在检查每一位的时候检查他的相邻位,是否符合条件,队友的方法是后面来次dfs、、其实都一样。。View Code #include<iostream>#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;char map[100][100];void init(int len){ for(int i=0;
阅读全文
hdoj 2059 龟兔赛跑
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2059很显然的加血的那种类型的题目,比赛遇过一次。看上面这个图,就是到达每站的时候,把可能通过其他方式到达该站的时间都算出来,然后取最小值,View Code #include<iostream>#include<string.h>#include<stdio.h>#include<algorithm>#define maxn 10000#define inf ~0U>>1using namespace std;int dis[maxn];doubl
阅读全文
hdoj 2571 命运
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2571就是很普通的根据题意递推了。不过题意有个坑的地方,有负值。所以初始化必须为-inf。被坑了好长时间。另外 不知道为什么 define 负数就错的 ,非得 改成 const int inf 。以后就这样用吧。和以前比赛做的那个走格子几乎是同样的。View Code #include<iostream>#include<string.h>#include<stdio.h>#include<algorithm>#define maxnconst int inf=
阅读全文
hdoj 1421 搬寝室
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1421刚开始想的时候,想转化成背包来做,但是不好表示,然后考虑到dp中的有几个相关元素,这里有两,一个是物品个数,一个是选择的对数,那么有了状态dp[i][j]表示前i件物品选择j对所付出的代价,那么对于第i件有选与不选两种,所以dp[i][j]=min((dp[i-2][j-1]+charge(weight[i-1],weight[i])),dp[i-1][j]);即这件物品要选的话那么前一件和他是一对的,则代价是他们两的代价加上dp[i-2][j-2],如果这件物品不选则dp[i-1][j],前i-1件选
阅读全文
hdoj 1176 免费馅饼
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1176开始对dp有感觉了,就是能够覆盖所有的状态,而且要有状态转移方程,即递推关系。那么这题就是,利用dp【i】【j】表示在第i秒在位置j可以获得的最大面包数,那么他可能从前一秒的左边,或者右边,或者原地不动来,那么着就是状态了。对于0和10这两个点要特殊处理。因为第一秒在位置5,所以初始化的时候要把第一秒的初始化了。初始化: dp[1][4]=map[1][4]; dp[1][5]=map[1][5]; dp[1][6]=map[1][6];状态转移:dp[i][j]=max(m...
阅读全文
hdoj 4160 Dolls
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4160转化为二分图的最小路径覆盖问题。那么答案就是n-最大匹配数View Code #include<iostream>#include<string.h>#include<algorithm>#include<stdio.h>#include<vector>#define maxn 10000using namespace std;int n;struct node0{ int h,w,l;}node[maxn];vector<int>
阅读全文