摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1160方法:建模后首先对速度降序排序,然后再排序后的结果序列中找一个最长的递增非连续子序列,并且记录前驱。感想:虽然以来就根据速度排了序,但是要注意速度相等的情况。代码:View Code #include<iostream>#include<math.h>#include<algorithm>#include<stack>using namespace std;int const MAX =0x3f3f3f3f;struct Mouse{ int w 阅读全文
posted @ 2013-05-02 10:38 kbyd 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078方法:由于该题目中是二维数组,并且每一个cell都可能被从几个方向探寻到,而不是一维的那样只会被从前往后的方向探寻到,所以,这里需要对这些cell(除起始点那个)根据里面含有的cheese量递增排序,然后根据这个顺序去考虑cell。可以这样理解,计算一个cell A作为当前递增非连续子序列最后一个元素时能获取多少的值,对于b,c ,d,e ....这些可以直接移动到a的cell,首先要计算出b,c ,d,e。。这些cell作为递增非连续子序列最后一个元素时能获取多少的值,这是他们的最优解,然后 阅读全文
posted @ 2013-05-02 10:08 kbyd 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087方法:设F(ni)为当第ni个作为一个递增非连续字段最后一个元素的时候,该字段累加的最大值,设第x个元素的值为v(x)。然后建立状态转移方程:F(ni) = max({F(ai)+v(ni) | v(ai)<v(ni) and 0<=ai<ni}),对每一个这样的第ni个元素做这样的处理,最后的解为:max( F(x) | 0<=x<=n).代码实现的时候会有一个优化,那就是对于这样的情况:1 2 3 4 5 9 8考虑那个8的时候,是从9往前探寻所有小于8的数, 阅读全文
posted @ 2013-04-26 17:45 kbyd 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1881方法:设F(i,n)为当考察到第i个bg,在第n天的时候,能获取的最大快乐,当然该bg要对一天获得的快乐度产生影响,则必须要第i个bg的结束时间i_deadLine小于等于n,已经当天减去其持续时间i_duration,设每个bg的快乐度是i_pleasure,bg的数量为count,状态转移方程如下: F(i,n) = Max(F(i,n-i_duration)+i_pleasure, F(i,n)), n<= i_deadLine and n-i>=0;对每一个bg都做以上的考 阅读全文
posted @ 2013-04-26 15:56 kbyd 阅读(415) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1903方法:设F(currency_type,n) 为在第n天,如果要持有currency_type的钱,那么以该currency_type为单位能获得的钱多是多少。设0代表加元,1代笔美元,p_rate为美元用加元表示的价格,c_rate表示佣金收取率,就是手续费,防过度投机的。状态转移方程是: { Max(F(0,n-1),F(1,n-1)*p_rate*c_rate), currency_type == 0;F(currency_type,n) = ... 阅读全文
posted @ 2013-04-26 15:08 kbyd 阅读(231) 评论(0) 推荐(0) 编辑
摘要: View Code #include<iostream>//#include<math.h>//#include<algorithm>//#include<queue>//#include<stack>using namespace std;int const MAX =0x3f3f3f3f; struct state{ int remainDriving; int divingDist; int fDist; double time;};int main(){ int totalLengh; int chargerCount,dri 阅读全文
posted @ 2013-04-26 14:34 kbyd 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1421方法:首先对于这些重量乱序的物品,需要排序来贪心初始化然每件物品在选择的时候,都是选择与其重量最接近的。然后建立状态转移方程,设F(k,i)为当选择第i物品的时候,从中选择k对物品的最小疲劳度,staff[i]为排序好了的物品中第i个的重量,方程如下: { (taff[2] - staff[1])^2, k==1 and i==2;F(k,i) = Max( (staff[i]- staff[i-1])^2, F(k,i-1) ), k==1 and i>=3; ... 阅读全文
posted @ 2013-04-23 20:27 kbyd 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4472方法:该题目不是最优解类型的dp,属于排列组合的dp,根据题目建好模型后得到如下状态转移方程: { 1, n==1;F(n) = Sum{F((n-1)/x)| (n-1)%x == 0 && 1<=x<=n-1}, n>=2; }最终F(N)为解。感谢:简单题。代码:View Code #include<iostream>#include<math.h>//#include<algorithm>//#include< 阅读全文
posted @ 2013-04-23 15:55 kbyd 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4526方法:设F[x,m]为在m分钟,已经累积走了x人所花了多少钱最少为多少,设在第i分钟可以累计走的最大人数是c(i),出租车在第i分钟每人需要的额外等待价格p(i),有剩余作为数量a(i),出租车基础价格p,学生总数totalStdCount,总时间为M,状态转移方程是:F[x,m] = Min{ F[i,m-1] +(x-i)*p(m)+p | 0<=i<=c(m-1) and i<=x<=Min(c(m-1)+a(m) , totalStdCount)and x-i 阅读全文
posted @ 2013-04-23 15:33 kbyd 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4502方法:设F(m)为在第m天累积到的工资,第i个工作开始时间为bi,结束时间ei,工资为si,总共天数M。建立状态转移方程: { 0, m==0;F(m) = Max(F(bi-1)+si,F(m)); m>=ei, F(m), m<ei; }.最终F(M)为问题的解。通过2重循环循环来实现对工作的处理顺序是按照工作的结束时间来的,这样就不需要排序。感想:需要动点脑筋建下模。代码:View Code #include<iostream>using namespace s 阅读全文
posted @ 2013-04-23 14:59 kbyd 阅读(150) 评论(0) 推荐(0) 编辑