2012年9月27日
摘要: 第一次我理解错了题目,以为是最长路径问题,YY了N久,发现不对。我发现,它从1-3一定会经过2,而不是简单的最长路径问题,所以我们需要用回溯法来解决。题目意思: 有一辆车从A城市开往B城市,途中有m个站,车上最多的载客人数为n人,每一个站的价格就是终点和起点的差值,现在有k分订单,要求找到这辆车的最大利润。解题思路: 这一题如果我们去搜索站点,那么情况将会非常糟糕,但是如果我么去搜索订单,那么对于每一个订单而言就是取和不取,那么我们就可以知道这个解空间树的每一层就是一个订单,那么我们只要对这个订单编号,然后搜索订单即可。另外我们开一个数组,专门来存储每一个站点当前的人数,注意这里的人数处理,一 阅读全文
posted @ 2012-09-27 22:11 有间博客 阅读(370) 评论(0) 推荐(0) 编辑
摘要: Special judge 搞了我查了N久。CODE:#include<iostream>#include<cstdlib>#include<cstdio>#include<cstring>#include<algorithm>usingnamespacestd;constintM=5001;constintINF=0x3f3f3f3f;intu[4*M],v[4*M],w[4*M];intp[M],r[4*M];intn,m,cnt;intsu[4*M],sv[4*M];intfind(intx){returnx==p[x]?x:p 阅读全文
posted @ 2012-09-27 19:12 有间博客 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 并查集CODE:#include<iostream>#include<cstdio>#include<cstring>usingnamespacestd;constintmaxn=30010;intp[maxn];intrank[maxn];intn,m;intfind(intx){returnp[x]==x?x:p[x]=find(p[x]);}voidUnion(intx,inty){inti=find(x),j=find(y);if(i==j)return;if(rank[i]>rank[j]){p[j]=i;rank[i]+=rank[j];} 阅读全文
posted @ 2012-09-27 12:45 有间博客 阅读(143) 评论(0) 推荐(0) 编辑