摘要: #includeusing namespace std;struct LinkNode{ int value; LinkNode* next; LinkNode* pre;};LinkNode* createDoubleLinkList(){ LinkNode* head = (L... 阅读全文
posted @ 2014-09-23 21:48 kbyd 阅读(233) 评论(0) 推荐(0) 编辑
摘要: #includeusing namespace std;struct LinkNode{ int value; LinkNode* next;};LinkNode* createRoundLinkList(){ LinkNode* head = (LinkNode*)malloc(si... 阅读全文
posted @ 2014-09-23 20:16 kbyd 阅读(180) 评论(0) 推荐(0) 编辑
摘要: #includeusing namespace std;/*有一个头节点下标都是从0开始头节点的下表是0,所以元素的下标是从1开始,添加删除都是以1为下标的位置头节点的value代表链表长度*/struct LinkNode{ int value; LinkNode* next;};Li... 阅读全文
posted @ 2014-09-23 13:32 kbyd 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1561方法:表面上看输入是一个森林的结构,其实可以用0节点作为父节点将森林中所有的树串起来作为一个树,然后开始DP,设F(P,x)是P为根的子树上选x个能获得的最大值的集合。 { {0}; x==0F(P,x) = {v+P的价值|v属于{F(s,x1)|s是p的直接子节点 && 0#include #includeusing namespace std;int n,m;struct Staff{ int cost; int value;};struct A... 阅读全文
posted @ 2013-08-07 17:44 kbyd 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520方法: 领导选择出现,则其直接下属不能出现,领导选择不出现,则其直接下属可出现可不出现,设F(P,0)为一个员工不出现能得的最大值,F(P,1)为一个员工要出现能得的最大值 { sum({F(S,0)|S是p的直接下属})+p的有趣度;P为非叶子F(P,1)= p的有趣度;P为叶子 }, { sum({ min(F(S,1),F(S,0)) |S是p的直接下属 });P为非叶子F(P,0)= 0;P为叶子 }原来问... 阅读全文
posted @ 2013-08-07 15:52 kbyd 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1054方法:一个节点选了,则其直接子节点可选可不选,一个节点没有选,则直接子节点必须选,所以建议状态转移方程设F(P,0)为没有选择p点最少要用多少点,F(P,1)为选择p点最少要用多少点 { sum({F(S,1)|S是p的直接子节点});P为非叶子F(P,0)= 0;P为叶子 }, { sum({ min(F(S,1),F(S,0)) |S是p的直接子节点 })+1;P为非叶子F(P,1)= 1;P为叶子 }原来问题... 阅读全文
posted @ 2013-08-07 15:24 kbyd 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2196方法:设FSdist[i].dist1为第i个节点到叶子最长路径,FSdist[i].dist1.dist为路径的距离,FSdist[i].dist1.entry为路径入口,FSdist[i].dist2为次长路径(如果存在次长路径的话,dist2中的信息和dist1一样。F[i].dist1.dist是第i个节点在树种一个节点的最长路径的距离,p[i]是第i个点的直接父节点,dist(x,y)为x 到y的距离,那么 { FSdist[i].dist1 , i是根节点... 阅读全文
posted @ 2013-08-06 17:11 kbyd 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1123方法:和使用堆栈来计算四则混合运算一样,唯一的区别在于计算两个操作数的时候不是计算运算结果,和计算起表达式,这里操作数也是表达式,表达式根据符号计算出新的表达式。规定:1.单个操作数是一个表达式,优先级是3,表达式运算符号未知。这种表达命名是E12.两个E1(就两个单操作数)可以根据操作符号形成一个行的表达式,优先级由操作符来定(加减为1,乘除为2),表达式运算符就是操作操作符。这种表达命名是E23.两个E2可以根据操作符号形成一个行的表达式,优先级由操作符来定(加减为1,乘除为2),表达式运 阅读全文
posted @ 2013-08-06 12:17 kbyd 阅读(512) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1100方法:首先根据输入的n判断出树里有多少个点m,然后设点数小于等于m的数的形态个数为x,则远问题转换成求n个点组成的树中排名第n-x的树的形态设buildTree(count,order)为建立count的点组成的树中排名order的树。核心就在该函数里。先设i是左子树的个数,0#include #include using namespace std;int catalan[18]={1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 阅读全文
posted @ 2013-08-05 19:09 kbyd 阅读(409) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1789方法:既然一个作业超期了,不管超期多久都只扣一次固定的学分。又因为每个作业只要一天,所以可以看出n个作业n天就可以做完,那些截至日期大于n天的就不用考虑了。只考虑截至日期在n天内的。可以这样考虑,设截至日期在n天内的作业如果全部按时完成的话得到的学分的和是sum,再设一个实际获得学分t_sum(初始0),然后一个作业按时完成 t_sum就加上学分,超期的就不管,然后把原来的问题转变为在截至日期在n天内的作业中安排一个顺序使得获得的学分之和t_sum最大,然后用sum-t_sum得到扣除的最少学 阅读全文
posted @ 2013-08-05 17:10 kbyd 阅读(214) 评论(0) 推荐(0) 编辑