随笔分类 -  ACM_贪心

摘要:题目链接:http://acm.hdu.edu.cn/userstatus.php?user=zhsl 题意:给两个大数,他们之间的加法法则每位相加不进位。现在可以对两个大数的每位重新排序,但是首位不能为0,求两个数相加最大的和。 从最高位开始,考虑和最大贪心,每次从两个大数中找两位a和b,max=(a+b)%10的和最大。如果max有多种组成情况,对于a+b10的组合情况,如果有a+b10的组合情况。。 1 //STATUS:C++_AC_453MS_2260KB 2 #include 3 #include 4 #include 5 //#include 6 #i... 阅读全文
posted @ 2013-09-13 00:52 zhsl 阅读(218) 评论(0) 推荐(0)
摘要:题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=26476 题意:给一个字符序列,比如MWMMW,每次可以取前面两个中的一个,取出来后,取出来的那个个数加一,要求使得两个字符的个数不超过n,求最多能取多少个。。 贪心就可以了。 1 //STATUS:C++_AC_36MS_1480KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12... 阅读全文
posted @ 2013-08-26 10:19 zhsl 阅读(473) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4647 注意这题两人的决策是想要使得自己的分数与对方的差值最大。。 注意到数据范围,显然是贪心之类的,如果没有变那么很简单,如果有边,那么我们进行拆边,把边的权值的一半加到所连的点上。然后排个序贪心。。 1 //STATUS:C++_AC_218MS_1020KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #in... 阅读全文
posted @ 2013-08-07 01:02 zhsl 阅读(260) 评论(0) 推荐(0)
摘要:题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3721 容易的贪心题,排个序。。 1 //STATUS:C++_AC_840MS_6272KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #includ... 阅读全文
posted @ 2013-07-23 00:31 zhsl 阅读(487) 评论(2) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4415 用贪心来解,开始分为两个集合的方法错了,没有考虑之间的相互影响,正确的姿势应该是这样的,分两种情况考虑: 1.只考虑Bi全为0的集合,排个序,能取多少就取多少。 2.如果Bi不为0的集合中的Ai的最小值low如果大于m,那么就到了 1 的情况。否则两个集合放在一起排个序,Bi不为0的集合中至少选取low,刀的总数为sum,那么除去排序后sum个Ai值大的敌人,然后还剩下m-low个durability。用这m-low去消灭剩下的集合。 1 //STATUS:C++_AC_... 阅读全文
posted @ 2013-07-16 16:08 zhsl 阅读(384) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=2287 题目很容易误以为是最大匹配,不过O( n^3 )的复杂度承受不了,必须用贪心或者DP策略了。 容易想到先排序,然后贪心,贪心策略如下: 1.如果田忌最慢的马比齐王最慢的马快,那么赢一局。 2.如果田忌最慢的马比齐王最慢的马慢,那么拿田忌最慢的马浪费掉齐王最快的马,输一局。 3.如果田忌最慢的马和齐王最慢的马一样快: (1)如果田忌最快的马比齐王最快的马快,那么赢一局。 (2)如果田忌最快的马比齐王最慢的马慢,那么拿田忌最慢的马浪费掉齐王最快的马,输一局。 (3)如果田... 阅读全文
posted @ 2013-05-21 12:11 zhsl 阅读(495) 评论(0) 推荐(0)
摘要:题目链接:http://poj.org/problem?id=3253 题目大意是,把一块长木板割成n快给定长度的木板,每次的花费为当前模板的长度,求最小的花费。逆向求解即可,贪心的思想,每次取两块木板长度最小的,花费为量长度之和,然后把新的长度加进去,操作n-1次,就是一个huffman树的构造过程。然后用优先队列搞之。 1 //STATUS:C++_AC_16MS_348KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 # 阅读全文
posted @ 2013-01-06 10:33 zhsl 阅读(311) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3998 题目大意是:给你一个数列,要你求最长的上升子序列,并且求最多有几个,且每个数只能在每个子序列中出现一次。对于第一问题很容易用DP解决,那么第二个问题,如果每个数可以出现多次的话,DP也很容易解决,但这里必须只能出现一次,否则的话就得判重,复杂度O(n3)。把问题简化一下,就是求长度为s的点不想交的路径有多少条,即每个点的容量为1(拆点),dp值相差为1的建立边,增加源汇点s、t,s向dp值为1的建立边,dp值最大的向t建立边,然后求最大流。 在网上看到这题贪心也可以搞,具体做法就是从... 阅读全文
posted @ 2012-12-11 09:42 zhsl 阅读(502) 评论(0) 推荐(0)