View Code import java.io.*;import java.awt.*;import java.math.*;import java.text.*;import java.util.*;public class Main { public static void main(String args[]) { Scanner cin = new Scanner(new BufferedInputStream(System.in)); int n; BigInteger dp []= new BigInteger[30... Read More
posted @ 2012-09-09 23:24 Because Of You Views(298) Comments(2) Diggs(0) Edit
http://blog.csdn.net/haha593572013/article Read More
posted @ 2012-08-20 15:57 Because Of You Views(404) Comments(1) Diggs(0) Edit
http://www.lightoj.com/volume_showproblem.php?problem=1031给你n个数,A、B两个人从两端取数,每一次可以取连续的一段数,而且每个人都按让自己最优的方案去取数(即取的数的和尽可能大)问最后A与B的差值最大是多少解法:枚举区间长度,从小区间DP到大区间对于一段区间,枚举分隔点,要么取左边,要么取右边下面是两种写法View Code #include<stdio.h>#include<string.h>#include<algorithm>using namespace std;const int inf Read More
posted @ 2012-07-22 09:24 Because Of You Views(692) Comments(0) Diggs(0) Edit
蛮有意思的一个题给你一个字符串,再给你k对字符要求删掉一些字符使得字符串中不存在相邻的字符是这k对中的某一对首先如果一个字符只出现在k对中的某一对中,那么可以贪心做因为不会出现如下情况了 : aaaabbbcccc2abac即不会出现删了之后前面的字符缩进来还会出现矛盾但是当可以出现这种情况怎么办DP就派上用场了dp[i][j]表示前i个字符处理完了之后最后一个字符为(j+'a')的最小需要删掉的字符那么到某个i位置的时候,首先不管它和前面留下来的最后一个字符有没有矛盾,都可以将它删除掉如果没有矛盾,我们还可以将状态转移为以当前字符结尾View Code #include< Read More
posted @ 2012-07-19 11:19 Because Of You Views(711) Comments(0) Diggs(0) Edit
这是我在codeforces上做的第一个网络流的题目,思维还不错,讲讲题意:给你n个任务,k个机器,n个任务的起始时间,持续时间,完成任务的获利每个机器可以完成任何一项任务,但是同一时刻只能完成一项任务,一旦某台机器在完成某项任务时,直到任务结束,这台机器都不能去做其他任务最后问你当获利最大时,应该安排那些机器工作,即输出方案刚看到题就想到一个贪心的思路,如果一台机器完成了某项工作,它应该继续去完成接下来最先开始的工作,感觉有点像网络流里面的建图啊,于是继续往这个方向YY,我擦,结果还真可以网络流来搞。具体建图方法:新建源汇S T‘对任务按照起始时间s按升序排序拆点:u 向 u'连一条 Read More
posted @ 2012-07-18 15:46 Because Of You Views(864) Comments(0) Diggs(0) Edit
把所有的背包结合起来的一道终极背包题,做了的话背包一般就没问题了题意:给你n个种类的物品的描述,背包容量D每个种类有三个属性 K E PK表示这类物品最多可以选多少个,如果为0表示可以选无限多个E表示选择这类物品每个物品的价值P表示每个物品的花费如果单纯是这样,那这道题目就太水了,直接多重背包就ok了所以题目又加了点,而这一点想了我n久 啊题目还将一些种类的物品分了个组,每组种类中最多只能选一个种类的物品即加上了分组背包,按理说再往多重背包上套个分组背包不久好了,但是仔细想想发现每一组物品是由一些种类的物品组成的,只能在里面选一类,而每一类物品又有自己的性质,所以不好搞。做法是这样的:开个临时 Read More
posted @ 2012-07-17 13:47 Because Of You Views(1135) Comments(1) Diggs(1) Edit
最小点权覆盖集的总权值 + 最大点权独立集的总权值 = 图的总权值所以最大点权独立集的题目都可以转换成最小点权覆盖集的题目注意:图必须是二分图 否则是NP问题两道典型的题目最大点权独立集hdu 1565 http://acm.hdu.edu.cn/showproblem.php?pid=1565将方格黑白染色(类似于国际象棋的棋盘),然后出现二分图了,怎么建边?代码已经很详细了View Code #include<stdio.h>#include<string.h>const int MAX=1010;const int INF=1000000000;struct{ i Read More
posted @ 2012-07-16 19:46 Because Of You Views(1037) Comments(0) Diggs(0) Edit
这道题综合了两种常见的问题:字符串的接龙以及平均值的最优化问题。对于前者,我们可以采取把单词看成边,把首尾字母组合看成点的方法。例如对于单词ababc就是点”ab”向点”bc”连一条长度为5的边。这样问题的模型变得更加清晰,规模也得到减小。那么原问题就可以转化成在此图中找一个环,使得环上边权的平均值最大。对于这种问题,我们有很经典的解决方法:由于Average=(E1+E2+…..+Ek)/K所以Average*K=E1+E2+……+Ek即(E1-Average)+(E2-Average)+….+ (Ek-Average)=0另外注意到上式中的等于号可以改写为小于等于,那么我们可以二分答案An Read More
posted @ 2012-07-13 17:28 Because Of You Views(1966) Comments(0) Diggs(1) Edit
第一次接触这种类型的建图题,记录一下题意:在一个20*20的方格中,建造一些围墙,使得X和某些A与E和外界都不联通,建造围墙有对应的花费,而对于满足条件的A,有对应的收入。首先2^5枚举哪些A要被围住,然后就要求所需的最小费用,这就是典型的最大流最小割问题。其中X和所枚举的A同源连一条流量为inf的边,E和边界同汇连一条流量为inf的边。以上是watashi的简练题解,我等若菜一开始还没反应过来为什么建好图后的最小割就是把X和一些A与E隔开的最小代价呢?注意,选择了某条边为割边就表示方格中两个格子间的那条围墙被选择了。注意到S集合是X和A,T集合是E和边界,所以求一下最小割后s集合中的点无法到 Read More
posted @ 2012-07-12 23:26 Because Of You Views(677) Comments(0) Diggs(0) Edit
很好的树形DP,破环为树;这道题目很特殊,看到的时候根本无从下手,因为以前没接触过这种类型的树形DP,网上搜了一下发现自己简直弱爆了。。这是一类最简单的树形DP,考虑某个节点选或不选,然后把两种状态从叶子向根更新上去即可,但是这道题中给你的不是一棵树,是图,特殊的图每个点都只有一个父亲(或一个儿子),所以形成的环是简单环,所以可以考虑破环,从环上的一个点出发开始DP,这个点的两种状态(选或不选)分别枚举一下View Code #include<cstdio>#include<cstring>#include<algorithm>using namespace Read More
posted @ 2012-07-11 23:10 Because Of You Views(790) Comments(0) Diggs(0) Edit