上一页 1 2 3 4 5 6 7 8 ··· 13 下一页
摘要: 这道题是说有n个人要上舞台,每个人有自己的权值,每个人的不高兴值为这个人的权值乘以要等的人数,给一个初始的上台序列,有一个栈可以供你使用来调整上台的顺序。找出最优的上台顺序使得不高兴值的和最小。解决方法:区间DP,dp[x][y]表示区间x到y所能取得的最优值,注意这个区间的划分方法View Code 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #define N 105 5 #define inf 0x7f7f7f7f 6 using namespace std; 7 int 阅读全文
posted @ 2012-09-11 13:38 zhenhai 阅读(212) 评论(0) 推荐(0)
摘要: 亚洲区天津赛区网络预选赛的一道题,简单的搜索,但是搜索的时候最好把开始点1拆为两个节点,如果1不是必经节点,那么拆不拆都无所谓,如果1是必经节点,那么在刚开始在1的时候选择工作还是到最后再工作就要分情况,所以要进行拆点。View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define N 105 5 #define inf 0x7fffffff 6 using namespace std; 7 int map[N][N]; 8 int c[N],d[N],f[18] 阅读全文
posted @ 2012-09-11 12:27 zhenhai 阅读(145) 评论(0) 推荐(0)
摘要: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4009这道题是说一个村庄里的人家住在不同的位置,而且有不同的高度,每户人家可以自己修建水井,也可以选择从别的人家修建引水渠,并且回因为位置的高低产生不同的费用,首先,每户人家都可以选择自己修建水井,所以不存在无解的情况,然后,建立一个虚拟根,从根出发到第i个节点有权值为这户人家自己修建水井的费用,如果i能从j引水,从j到i建立一条权值为修建引水渠费用的边,最后要找的就是这个有向图的最小树形图。关于最小树形图百度百科有详细的描述和算法介绍,可以参照代码进行比对。View Code 1 #include.. 阅读全文
posted @ 2012-09-06 14:57 zhenhai 阅读(236) 评论(0) 推荐(0)
摘要: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4008题意很简单,给出一棵树,找出以x节点为根节点的情况下,y节点的最小儿子节点和最小子孙节点,每次进行一次搜索肯定是不行的,所以我们考虑只进行一次搜索,利用得到的结论去找到在其他情况下的解,先在以1为根节点的树中进行一遍深度优先搜索,记录下son[u][0](以u为根节点的子树中标号最小的子节点点)son[u][1](以u为根节点的树中标号次小的子节点)因为在选定不同的根节点导致图旋转的过程中,这两个节点最多有一个会变成u的父节点,所以直接确定另一个就可以了。low[u][0](以u为节点的子树中,标 阅读全文
posted @ 2012-09-05 14:27 zhenhai 阅读(153) 评论(0) 推荐(0)
摘要: 链接:http://poj.org/problem?id=1222这题是说有5*6个开关,0处于关闭状态,1处于开启状态,每按一个开关,周围的上下左右方向的开关会跟着翻转,而且题目中给了提示,任何一个开关,按偶数次和不按的作用是一样的,所以每个开关最多转换一次,问的是如何转换能达到全部都为关闭状态。我们可以知道,任意一个位置的开关由自己和周围的开关共同决定,那么可以对每一个开关建立一个方程,这样就有30个方程,30个未知数,一定有解,利用高斯消元加位运算可以解出每个未知数。View Code 1 #include<iostream> 2 #include<cstring> 阅读全文
posted @ 2012-09-05 11:52 zhenhai 阅读(204) 评论(0) 推荐(0)
摘要: 给出不超过14个长度不超过20的字符串,要求出一个包含所有字符串的长字符串的最短的长度,根据题目数据范围可以知道要用状态DP,每个二进制位表示一个字符串,而且需要用二维的,dp[i][j]表示以j为开头的剩下的状态为i的最优值,转移方程也很好写。View Code 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #define N 15 5 #define inf 0x7fffffff 6 using namespace std; 7 int dp[1<<15][N]; 阅读全文
posted @ 2012-09-04 19:58 zhenhai 阅读(181) 评论(0) 推荐(0)
摘要: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4005题意是说,在一个无向带权图中可以在原来没有直接相连的两个点上加一条边,然后要求你删去一条边,要求得出无论对方加的是哪一条边,你都可以删除一条<=v的边导致这个图不连通,要找出最小的V是多少。分析:首先,对于图中的双连通分量来说,删除其中的边是没有任何意义的,所以先进行缩点View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define N 20005 5 #def 阅读全文
posted @ 2012-09-04 16:46 zhenhai 阅读(210) 评论(0) 推荐(0)
摘要: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=400311年大连赛区预选赛的一道树形DP题,DP[i][j]表示以i为根节点的子树派j个机器人遍历整棵子树所走过的最短的总路径,dp[i][0]表示遍历完之后又回到i节点的值View Code 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #define N 10005 5 #define K 15 6 using namespace std; 7 int head[N],cnt; 8 st 阅读全文
posted @ 2012-09-03 17:29 zhenhai 阅读(213) 评论(0) 推荐(0)
摘要: 这道题很容易能看出来要用动态规划,但是背包确实不是很好想,用数组v[i][j]表示到i分钟,已经连续睡了j分钟所获得的价值,这样对于一个特定的点i所有的j就变成了矛盾的了,状态转移方程就很好写了View Code 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #define N 505 5 #define M 55 6 #define R 55 7 using namespace std; 8 int dp[N][M],v[N][R]; 9 int val[N];10 int ma 阅读全文
posted @ 2012-09-02 15:07 zhenhai 阅读(193) 评论(0) 推荐(0)
摘要: 链接:http://poj.org/problem?id=2373很明显的DP问题,但是如果利用n^2的算法,肯定会超时,dp[i]表示覆盖到i时的最优值,显然i是偶数,而根据题目描述可以知道,对于一个点i因为每一个覆盖的范围可以调节,而且有最大值和最小值,那么这个解的最优子结构肯定在一个区间里面,这样就可以考虑利用单调队列进行优化,单调队列记录的是在从一个点i开始的往前2*b-2*a的单调递增序列。View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include 阅读全文
posted @ 2012-08-29 14:38 zhenhai 阅读(384) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 7 8 ··· 13 下一页