上一页 1 2 3 4 5 6 7 ··· 13 下一页
摘要: 题意:不想描述了。。直接从这个博客抄了:http://www.cnblogs.com/rainydays/archive/2011/07/01/2095634.html有一些机器用来组装电脑,每台机器对输入机器的电脑有要求,符合要求的电脑被送入机器后会输出一台规定配件情况的电脑。而且分别告知每台机器在单位时间内处理电脑的台数。将这些机器连成生产线,问单位时间内出产的具有所有配件的电脑最多有多少台。其实就是个拆点的最大流,然后要求输出所有边的流量有变化的正向边。当然也可以不拆点做。WA了一次,题目有个小坑,就是如果所有输入都是2,那么它还是可以跟源点相连的。 1 #include 2 #i... 阅读全文
posted @ 2013-11-13 23:10 浙西贫农 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 题意:有4种硬币,面值分别为c1,c2,c3,c4,然后给出Q组查询。每组查询给出5个数d1,d2,d3,d4,v,分别表示面值为ci的硬币共有di个,然后要求将其凑成总值为v的方案数。数据范围大致是c 2 typedef long long LL; 3 LL dp[100010]; 4 5 int main(){ 6 int c[4],d[4],v,Q,kase; 7 scanf("%d",&kase); 8 while(kase--){ 9 dp[0] = 1;10 for(int i = 1;i = 0) ans += fl... 阅读全文
posted @ 2013-11-12 22:56 浙西贫农 阅读(479) 评论(0) 推荐(0) 编辑
摘要: 题意:火星人要攻打地球,火星人将派来一些伞兵来破坏军事设施。已知他们将降落在一个矩阵行的地区,而且知道这些人会降落在哪一行那一列。现在地球人可以造一些大炮来攻击他们,一门大炮可以攻击一行或者一列,一个伞兵只要被他所在的行或列的大炮打中他就会挂,而在每一行、每一列造大炮的价格是不同的,建造大炮总价格等于你选择在某行或某列造大炮价格的乘积。现在要求把所有的伞兵都搞挂了并且让这个价格尽可能的小。看到乘积尽量小,想到了取对数。那么剩下的问题就是二分图点权覆盖的问题了。最后求完最大流之后,再还原这个费用就可以了。 1 #include 2 #include 3 #include 4 #includ... 阅读全文
posted @ 2013-11-12 19:13 浙西贫农 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一个流网络,问有仅将一条边的容量增大可以使得最大流增大的边有多少条。首先,肯定将是满流的边的容量增大才可能使得最大流增大。但是这些满流的边不一定能是最小割,即使它出现在最小割中,把它的容量增大也不一定能使最大流增大。那么考虑一下求完最大流后不能增广的原因,或者说,怎么样才能在残量网络中增广呢?从S出发,dfs出所有满流的正向边,给dfs经过的点标上f1。再从T出发,逆向dfs出所有满流的边,给dfs经过的点标上f2。那么如果有一条边是这样的:满流且有f1标记和f2标记,那么增加它的容量,残量网络就又可以增广了,最大流会增加,因此这样的边就是我们需要寻找的边。 1 #include . 阅读全文
posted @ 2013-11-10 22:18 浙西贫农 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 题意:有m个房间,你需要保护第n个房间使得其不被攻入。房间与房间之间会有门,门上有机关,因此当门关上时,只能从一边进入另外一边而不能从相反方向进入。现在告诉你这n个房间以及门的分布情况,以及开始的时候哪些房间里有贼,问至少关掉几个门使得房间n不被攻入。感觉这个题目蛮有意思的。比较容易想到最小割。如果从房间a到房间b有一个门,如果这个门关上了,且门上的机关使得贼只能从a进入b而不能让其从b进入a,那么这里对应两条边(a,b,inf),(b,a,1),如果房间i里面有贼,对应边(S,i,inf),而需要保护的那个房间n就会汇点T。然后求一遍最大流。如果maxflow>=inf就说明不存在合法 阅读全文
posted @ 2013-11-10 17:35 浙西贫农 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 好题。搜的题解敲的,没什么好多说的。但是还是想说两点:1.本来一直不理解为什么这种博弈的问题可以用DP去做,因为双方都采用最优策略的情况下,不知道他会如何选择,但是今天明白了,这种博弈问题,对于给定的一个状态,其结果就已经是确定了的。因此可以由一个最初的确定的状态搜出所有的其他状态。另外,这里的dp数组只要赋值一次就可以了,因为不管输入的数据怎么变,给定的状态的结果是不会变的。2.能在现场赛中做出这种难度的DP,是我的目标,当然,这还需要很多的努力和练习。毕竟就算这道题告诉我是DP了,我也不知道怎么设计状态。还有好几个容易出问题的小细节我都出问题了。差距还是很大的。 1 #include 2. 阅读全文
posted @ 2013-11-08 22:50 浙西贫农 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一张有可能自环、重边的有向图。每个节点i上都有两个值Wi+,Wi-,分别表示删掉所有i点的入边需要的代价和删掉所有i点的出边需要的代价。现在要求把所有的边全部删掉,求最小代价。显然一条边只和个点有关,要删掉一条边(i,j),要么付出Wi-,要么付出Wi+,很容易让人想到二分图。其实这就是一个二分图点权覆盖的问题。把每个点i拆为i,i'。对所有的Wi+,对应边(i',T,Wi+),对所有的Wi-.对应边(S,i,Wi-),对于图中所有的边(u,v),对应边(u,v',inf)。然后求最小割就是答案。 1 #include 2 #include 3 #includ 阅读全文
posted @ 2013-11-08 17:02 浙西贫农 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 题意:开始的时候p=1,2个人轮流对p进行操作,每次操作中,他们可以选择把p乘上一个数,这个数的范围是2-9。现在的问题是,给你一个n,两人轮流操作,谁先把p操作到p>=n谁就获胜,两人都采用最优策略,问谁获胜。根据给定的n,可以找出一些必胜、必败的区间。不如说给出的n是162,那么必败的区间是[18,161],必胜的区间是[9,17]。显然先手一次就可以把p的值直接变成9,所以先手可以获胜。然后去递推这些区间就行了,直到递推到区间左边的值为小于10的数。然后判断一下这个区间是必胜的还是必败的区间,被谁取到就可以了。 1 #include 2 using namespace std; 3 阅读全文
posted @ 2013-11-07 21:04 浙西贫农 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 题意:有7个人从m个数中任选一个不重复的,其中4和7是幸运数,一个人的幸运值等于他所选的数字中所有'4'的个数+'7'的个数。求一个人的幸运值比其他6人幸运值总和大的方案数。 1 #include 2 #define MOD 1000000007 3 using namespace std; 4 typedef long long LL; 5 LL dp[11][11]; 6 LL f[11],ans; 7 int bit[11],len; 8 void init(){ 9 dp[1][0] = 8;dp[1][1] = 2;10 for(int i = 2;i 阅读全文
posted @ 2013-11-06 18:37 浙西贫农 阅读(356) 评论(0) 推荐(0) 编辑
摘要: 题意:有N艘船和N个港口,M个station。现在N艘船分别处在一些station上。有K条边连接站,有P条边连接港口和站。现在这N艘船都要回到港口,且每个港口只能容纳一艘船。问使这N艘船回到港口行程之和的最小值是多少。比较明显的求最小权匹配,用KM。做最短路的时候要注意如果船已经回到港口了,就不能再跑出去了,所以做floyd闭包或其他最短路的时候,松弛的时候不能用港口去松弛一个点对。然后得到各个船所在位置到各个港口的最短路后,把边权赋成负的船到港口的最短路值,然后跑KM就可以了。 1 #include 2 #include 3 #include 4 #include 5 #... 阅读全文
posted @ 2013-11-05 19:40 浙西贫农 阅读(143) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 13 下一页