- 博客(20)
- 资源 (6)
- 收藏
- 关注
原创 codeforces 217A Ice Skating
题意:加点,使图变成强连通图。做法:直接求出强连通分量个数,ans=连通数-1;#include #include#include#includeusing namespace std;bool gra[105][105];int vis[105],sign[105],time[105],t,ans;int n;vector >node;void dfs(int u){
2012-11-29 13:09:28 1013
原创 codeforces 144D Missile Silos spfa
题意:给定一张地图,可以在边和点上设立发射井,其中发射井到首都的距离必须等于l做法:十万个点,竟然可以求最短路,而且最后时间还只有区区125ms.可能是边太少的原因...图中的边可以分成两类,一种是最短路上的边,一种是普通边。若边(u,v)是v最短路上的边,这样要dis[v]>l并且dis[u]否则,只要当dis[u]#include#include#include#
2012-11-29 13:03:08 1119
原创 C2. Party
题意:额,只要注意each的意思做法:基本的并查集技术,只要理解了each的意思...#include#define LMT 2002using namespace std;int get[LMT],fs,father[LMT];int work(int u){ int x=u; while(x!=father[x]) x=father[x];
2012-11-27 23:31:38 894
原创 codeforces 232A Cycles 图论 贪心 思维
题意:在一个无相图中有N个长度为3 的回路,输出符合条件的图。注意此图的节点数不得超过100做法:贪心手法。点最多一百个,那么,要让每个点的作用都发挥出来。所有,可以模拟每次加入点所带来的影响,来确定,两个点是否要连接。#include #includeusing namespace std;int c[103],have[103],ans,k,ss;bool gra[103][1
2012-11-27 14:12:26 901
原创 codeforces 242C King's Path STL库
题意:在一个几乎无限大的棋盘上,有一个起点和终点。有一些格子是不可走的,一个问一个王从起点走向终点所需要的最小步数。王可以向八个周围的格子走。做法:最多才100W个点,BFS暴力。#include#include#include#include#define LMT 1000005using namespace std;//bfs,最短路也可用BFS暴力的//只有一百万个点,
2012-11-26 15:56:21 1290
原创 codeforces 246D. Colorful Graph
题意:一个图中,每个点被染成不同的颜色。同颜色的点构成集合中的等价类v(k),k为颜色的种类。现在又有一个集合q(k),代表某一个点的颜色为K,在它周围与它不同色的点。这里要注意的是1----2----3,当1,3的颜色相同时,不能重复计算2,因为是集合。如此下来,算出基数最小的集合q(k)。做法:用set模仿集合可以很好的解决重复问题#include #include#i
2012-11-25 22:45:05 1700
原创 C++中的虚析构函数,C++陷阱
#include //虚析构函数是在派生类转换成为基类时出现。//派生类默认可以转换成为基类using namespace std;class A{ public: virtual~A(){ cout<<"~A()"<<endl;}};class B:public A{ public: ~B(){ cout<<"~B()"
2012-11-22 21:56:20 509
原创 codeforces Codeforces Round #130 (Div. 2) B 208B Solitaire 记忆化搜索
题意:类似空挡接龙的游戏。设末尾堆编号为x,每一次可以与x-3或者x-1相和。两个头牌子可配的堆可以合成,求最后是否能够和成一堆。做法:暴力搜索不可行。所以DP,那么确定无后效性状态。每个堆相和时,只需考虑x-1,x-3堆的情况。于前面的情况无关。dp[sum][a][b][c]=dp[sum-1][sum-4][b][c]||dp[sum-1][c][a][b]。这里有tirck..
2012-11-22 20:19:31 1018
原创 codeforces 245C Game with Coins
题意:一堆编号由1-n的箱子,每次取三个箱子,编号为n,2*n,2*n-1,取出其中的一枚银币,问最少取多少次可把里面的钱去完。当有箱子无法取到时(比如n小于三,或者为偶数),输出负一。做法:贪心策略。远方的箱子取到的机会最少,可能只有一次,而且在去远方的箱子时,近端的箱子也能跟着收益,所以,从第n个箱子进行逆推。#include#define LMT 105//这个题目重要的是在删除
2012-11-22 10:59:56 944
原创 Codeforces Round #137 (Div. 2) 222E. Decoding Genome
题意:测火星人的基因。输入一串字符串,长度为n,这个字符串中,有些字符对是不允许出现的,问符合题意的串的个数。做法:b[i][0]=m*b[i-1][0]-sum(no);sum求的是在m个字母中每一个字母,以这个字母开头的字符对的数量的和。 b[i][x](x>0)=b[i-1][0]+sum(ok*dp[i][y])若一个序列为,那么ok[a][b]=-1;这样就可以敲代码了
2012-11-21 23:44:56 741
原创 hdu 4332 状态压缩的矩阵加速DP 谢sue神
题意:现在有无数的1*1*2的砖头,要垒成一个长度为N的烟囱。砖头可以竖起来,可以平着放,问题是当四块砖都平f放时,题目认为可以有两种情况。做法:用0代表空,1代表覆盖。模拟每个截面放置砖头的情况后,可以发现不管怎么放,1的个数总是偶数,这可以用来化简。由于放置的特殊性,其实截面可以抽象成一个首尾可以相互影响的8位二进制数。如此,考虑所有情况,进行判断。#include #inclu
2012-11-21 16:34:23 909
原创 codefroces 2B The least round way
题意:一个矩阵中写满数字,从左上都到左下,每次只能向下方和右方走,每次经过一点,就乘以那个点上的数。求一条路径,是最终结果末尾的零最少。做法:一般的路径DP。只要DP求出两条路径,一条获得的2最少,一条5最少,然后比较去其中值最小的一条。可惜,一开始写了个不必要的优化,时间加长,还容易错,以后这种没必要的事情还是别做了#include #include#define LMT 10000
2012-11-14 12:29:53 815
原创 POJ 3233
题意:就矩阵幂的和做法:线性代数课上有,单个矩阵也是可以当成一个矩阵中的元素的所以构建矩阵|A o| |A| |E E| 其中o 是零矩阵。,和矩阵|o|,在计算第一矩阵的n次幂之后再与第二个矩阵相乘,这样,就在第二个矩阵的o矩阵处,就是答案
2012-11-13 13:31:48 515
原创 hdu 2294 Pendant
题意:求序列数。这个序列中有k种珍珠,而珍珠一共也只有K种,这个序列的长度不小于1,不大于n.做法:建立状态 dp[i][j]=dp[i-1][j]*j+dp[i-1][j-1]*(k-j+1),而01000.... dp[i][0] 而ans=dp[i][0]+dp[i][1]+dp[i][2]....dp[i][n];可用累加的方法,算出ans,就是把t的长宽均变
2012-11-11 23:44:42 798
原创 codeforces 118D Caesar's Legions 背包问题
题意:求序列数。这个序列里不能有连续k1个footmen还有k2个horsemen。做法:这种有固定资源,并且有离散化消耗的,一定要忘背包上靠。#include#define mod 100000000#define LL long longLL dp[2][202][102];int main(void){ int n1,n2,k1,k2; int i,j,t;
2012-11-11 21:50:41 1666 3
原创 codeforces D. Distance in Tree
题意:在一颗数中找距离为K的点对数 以后确定状态之后,最后看看有什么属性是不用确定的。。#include#include#include#define LL long long#define LMT 50003using namespace std;LL dis[LMT][505];//SB,这里是500!!!!int next[LMT];int all,k,n;LL ans;
2012-11-10 20:21:10 764
原创 codeforces Another Problem on Strings 记录一个不慎
题意:输入一个二进制数,看其中有K个1 的字串数。组合数学的思想要多用啊...#include#include#define LMT 1000003//要有一个变大using namespace std;long long q[LMT],k;int head,tail;int main(){ int i=0,sum=0; char a; head=tail=
2012-11-10 10:58:48 625
原创 Warcraft III 守望者的烦恼
//注意到这是一个形如f[i]=a1*f[i-1]+a2*f[i-2]+...+ak[i-k];的方程,立刻就反应到可以使用矩阵乘法进行优化。//模仿了大神的做法...//虽然说可以不经过1,但是这是建立在闪烁技能上的,所以仍旧要从头走起#include #include#include#define mod 7777777#define LL __int64using names
2012-11-08 13:19:59 1061
原创 vijos 1049 送给圣诞夜的礼品
这题是基础了,无耐C++驾驭能力不高...线性代数也弱 //矩阵与置换之间的关系//不用写=//小心函数的本地指代//函数用完内存全释放//把指数想象成二进制数就可以理解了//单位矩阵别搞错了//time=0的时候彻底被坑了#include#includeusing namespace std;typedef class matrix{ public:
2012-11-07 21:38:24 909
原创 Codeforces Round #148 (Div. 2)
//B. Easy Tape Programming//网站崩溃,没办法,后来做的#include#include//提高查错能力啊//聪明的删除char order[202],ore[202];int start,end,l,p;int main(void){ int n,q,i,pre; char dp; int time[11]; sca
2012-11-05 21:29:17 547
浙江外国语学院 ACM入门资料
2012-08-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人