上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 17 下一页
摘要: 哎,被这道题搞死啦,详细解释在代码中//最小割模型。首先建网络流模型,建立源点s和终点t(分别代表这两块不同的芯片),然后把s和每个点之间连一条容量为1,方向从s到点的边(方向 //一定要确定,因为割的容量的定义),然后从每个点到终点连一条容量为1,方向为点到t的边,然后在有联系的 //两点之间建一条容量为1的无向边(即一对容量为1方向相反的有向边)。建图完成。那么,在这个网络流模型中的一个割 //就对应于一种选择方案,而此方案的花费即割的容量。原因如下:先看所有的点都没有联系的情况,那么所有点和s的边 //和t的边这两条边有且仅有一条边在割去的边的集合中,哪条边割去说明点在哪个芯片上,那么割 阅读全文
posted @ 2012-12-09 17:58 LJ_COME!!!!! 阅读(169) 评论(0) 推荐(0)
摘要: 一道基础题,却因为这样那样的粗心,用了这么长时间,和uva10086一模一样#include <iostream> #include <cstring> #include <cstdio> #include <queue> using namespace std; const int maxn=1100; const int maxe=30000; const int inf=200000000; struct Edge { int from,to,flow,cap,cost,next; }; int n,m,tot; int head[maxn 阅读全文
posted @ 2012-12-09 16:20 LJ_COME!!!!! 阅读(138) 评论(0) 推荐(0)
摘要: 网络流之最大流。此题的关键就是建模,看了题目之后一点思路都没有,后来在网上看了解题报告后,才明白了这个过程。首先,在原图中抽象出一个新图。新图是由旧图中的每个milking machine到每个cow的最短路径组成,每条最短路径由原图中的各点间的某些路径组成,抽象为新图中的一条路径,此过程通过floyd算法(各顶点间的最短路径)实现。接下来,就是通过二分来枚举答案。通过给出一个流量的上限,给新图的路径的容量cap赋值,如果小于等于上限cap就为1,反之为0。最后就可将问题转化为新图中,从各milk machine(即源点s)到各cow(即终点t)的最大流(一个流就对应与一头牛)(其实还不完整) 阅读全文
posted @ 2012-12-01 23:26 LJ_COME!!!!! 阅读(154) 评论(0) 推荐(0)
摘要: 贪心基础题。至少能赢多少次。换句话说,就是自己每次出一张牌,其他人尽量让你输,其他人足够聪明,当你出一张牌时,为了让你输,会出一张比你大的,除非其他人没有,那么这轮你就赢啦,为了不造成浪费,最优的方法肯定是出一张比你出的牌大的牌中最小的牌(贪心的思想),可以证明这样的贪心结构是正确的#include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int maxn=1001; int vis[maxn],a[maxn]; int n,m; int mai 阅读全文
posted @ 2012-11-27 17:29 LJ_COME!!!!! 阅读(131) 评论(0) 推荐(0)
摘要: 网络流最基础的题目,最大流#include <iostream> #include <cstring> #include <queue> using namespace std; const int maxn=210; const int inf=1<<30; int cap[maxn][maxn],flow[maxn][maxn],d[maxn]; int n,m,tot; void ek() { int q[maxn],p[maxn],i; int front,rear; for(;;) { memset(d,0,sizeof(d)); fr 阅读全文
posted @ 2012-11-27 15:25 LJ_COME!!!!! 阅读(104) 评论(0) 推荐(0)
摘要: 这道题让我新认识到的是,做dp题,不一定非得找到具体的某一个最优子结构,可以美剧所有可能子结构的最优解,通过比较得到结果。向此题,只要找到和子结构之间的关系,然后选取最大的,之前一直死去想最有子结构,后来看了黑书。发现lrj所说,只是去找子问题中的最优解。还有就是数据中有空字符串,要注意#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn=110; const int inf=1<<30; char s[maxn]; 阅读全文
posted @ 2012-11-26 20:03 LJ_COME!!!!! 阅读(143) 评论(0) 推荐(0)
摘要: //读了半大天题终于发现就是LIS问题 #include <iostream> #include <cstdio> using namespace std; const int maxn=100000; const int inf=1<<30; int s[maxn],r[maxn],d[maxn],g[maxn]; int n; int low_bound(int x) { int high=n,low=0,mid; while(high-low>0) { mid=low+(high-low)/2; if(g[mid]>=x) high=mid 阅读全文
posted @ 2012-11-25 11:49 LJ_COME!!!!! 阅读(184) 评论(0) 推荐(0)
摘要: dp,LCS的应用//求出输入的字符串和他的回文串的LCS的长度l,用此字符串的长度n-l,即得结果 //还有存储的问题,如果用f[maxn][maxn]存储的话会超内存,可通过滚动数组优化 //因为求当前f[i][j]时可能会用到f[i-1][j-1],f[i-1][j],f[i][j-1],观察发现i,j //只用到当前的i,i-1,二者可用奇偶性区分,只需用一个f[i%2][j]就可表示,为什么 //不能用f[i][j%2]表示,可通过判定求当前的f[i][j%2]时,f[i-1][j%2]并不是f[i-1][j] //所以这样做是错误的,但前者却可以通过类似的方法判是正确的,所以只需f 阅读全文
posted @ 2012-11-24 10:28 LJ_COME!!!!! 阅读(141) 评论(0) 推荐(0)
摘要: dp ,经典LCS,你懂的,不解释//dp 经典的LCS问题。对于s1,s2,如果c(s1)=c(s2),则f(s1,s2)=f(s1-1,s2-1,)+1,如果c(s2)!=c(s1),则 //f(s1,s2)=max{f(s1-1,s2),f(s1,s2-1)},边界是f(s1,0)=0,f(0,s2)=0; #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn=1000; const int inf=1<<31 阅读全文
posted @ 2012-11-23 17:30 LJ_COME!!!!! 阅读(127) 评论(0) 推荐(0)
摘要: 1、USACO2006年November题目和测试数据的网址http://ace.delos.com/NOV062007年open赛题目和测试数据的网址http://ace.delos.com/OPEN07以此类推2、日本ACM比赛http://www.acm-japan.org/http://icpc2010.honiden.nii.ac.jp/en/past-contests3、官方网站02年网址http://icpc.baylor.edu/past/icpc2002/regionals/report.html03年以后改2002到2003即可。部分有测试数据4、德国的http://www 阅读全文
posted @ 2012-11-22 19:41 LJ_COME!!!!! 阅读(317) 评论(0) 推荐(0)
上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 17 下一页