- 博客(10)
- 收藏
- 关注
原创 Codeforces Round #349 (Div. 1)
A. Reberland Linguistics 此题重在理解”in a row”的含义。意思是不能有连续相同的两截。正确理解了题意以后,随便dp一下,答案塞到set里面即可。#include <bits/stdc++.h>#include <unordered_map>using namespace std;bool start[4][11111];int main(){ string
2016-04-30 18:39:26 411
原创 模板-KM算法
#include <bits/stdc++.h>using namespace std;const int maxn = 66;const int maxN = 410;int lx[maxN];int ly[maxN];int sx[maxN];int sy[maxN];int match[maxN];int weight[maxN][maxN];int sz;bool path(i
2016-04-29 23:41:36 476
原创 zoj 2342 Roads
在最优策略中,我们只会减少石头路的费用,增加烂泥路的费用,设这个改变量为l(x)l(x)。由于前n−1n-1条边是生成树,对第nn~mm条边中的每一条,它的加入会形成一个圈。在最优解的情况下,圈中的任意一条石头路费用不大于烂泥路的费用。把石头路看作二分图的X部,烂泥路看作Y部,可以得到关于改变量l(x)l(x)的不等式。这个模型直接套二分图最优匹配就行,求出的可行顶标就是改变量。 KM算法还是
2016-04-29 23:39:04 371
原创 Codeforces Round #348 (VK Cup 2016 Round 2, Div. 1 Edition)
A. Little Artem and Matrix 没什么好说的,逆向模拟一下。#include <bits/stdc++.h>#include <unordered_map>using namespace std;#define ll long longint a[10010][5];int ans[111][111];int main(){ int n,m,q; cin>
2016-04-25 21:29:32 380
原创 TopCoder SRM 688
250 这个对子串的操作,可以理解为,把被操作的子串写在纸条上,然后翻转纸条。。仔细分析可以发现,串中匹配的部分,翻转后还是匹配的,所以我们可以把已经匹配的部分去除。去除匹配部分后,剩下的部分肯定是这样的,前面是’)’,后面是’(‘,不可能交替出现两种括号(出现肯定被去掉了)。于是肯定存在只翻转前面一段和后面一段的解。 了解了以上信息,就很容易做了。。具体实现的时候,可以暴力,也可以用栈稍微
2016-04-19 22:50:48 461
原创 zoj 2338 The Towers of Hanoi Revisited
还是太naive了,在知道经典汉诺塔的情况下,居然很久没想出来。其实多根棍子和三根是一个原理。n个盘子,m根棍子的最优解,一定是把一部分盘子(假设为x)先移到某个中间棍子上,也就是先解决子问题(x,m),然后把剩下的n-x个盘子通过剩下的m-1根棍子用最优方案转移,即子问题(n-x,m-1),最后把中间棍子上的那x个盘子移过去,即子问题(x,m)。这样可以用dp来求解。#include <iostr
2016-04-19 22:18:37 373
原创 Google Code Jam 2016 Round 1A
Problem A. The Last Word 贪心。每次加入新的字符时,比较当前字符与生成的串的首字符的大小关系,如果当前字符不小于首字符,加在开头,否则加在结尾。#include <bits/stdc++.h>using namespace std;#define ll long long string str;int main(){ freopen("A-large.in","r
2016-04-16 13:49:35 728
原创 TopCoder SRM687 div1 500
题意是已知一个无向图所有点对间的最小割,构造一个合法的原图。 看了题解得知有个叫Gomory-Hu tree的东西,即最小割树。解题要点是,你要知道一个图的所有点对最小割,一定能用一棵树做到。于是我们的目标变为构造这样一棵树。 我们可以用分治法,不断把当前点集划分为两个点集,其中两个点集的点之间流量是当前最小,不断分治直到集合只剩一个点。#include <bits/stdc++.h>
2016-04-13 21:59:30 607
原创 hnuoj 13103 Easy Delete
题目链接 先不管不能删的文件,我们可以把出现文件的行看作二分图的X部,列看作二分图的Y部,文件则是边。删除所有文件,其实就是求图的最小点覆盖,也就是最大匹配。于是解法就是先处理与不能删文件处在同一行、列的情况,然后跑最大匹配。#include<vector>#include<set>#include<map>#include<algorithm>#include<iostream>#in
2016-04-09 06:46:10 462
原创 Codeforces VK Cup 2016 - Round 1 (Div. 2 Edition)
A. Bear and Reverse Radewoosh 按要求计算一下即可。#include <bits/stdc++.h>#define ll long longusing namespace std;int p[111];int t[111];int main(){ int n,c; cin>>n>>c; for(int i=1;i<=n;i++){
2016-04-01 13:24:39 24327
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人