上一页 1 2 3 4 5 6 ··· 12 下一页

2013年8月28日

LA 3644 易爆物 并查集

摘要: 题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1645题意:有一些化合物,每种化合物中含有两种元素,如果有k种化合物含有K种元素就会爆炸,现在装车司机按照输入顺序一件一件的装,遇到加入后会爆炸的化合物就不装,问会有多少化合物不能被装入。解法:将每种元素看成一个顶点,一个化合物含有两种元素就是一条边,构图完成后,出现环就意味着爆炸,所以用并查集,像Kruskal算法一样为同一连通分量的为同一个父节点,加入 阅读全文

posted @ 2013-08-28 16:32 allh123 阅读(253) 评论(0) 推荐(0) 编辑

UVA 11997 STL 优先队列

摘要: 题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3148题意:给K个数组,每个数组含有K个整数,从每个数组中各选一个数加起来,得到一个sum,这样的选法一共有K^k种,现在求这样的和中最小的K个sum.解法:先考虑两个数组的情形假设A1,第一个数为和,第二个数为B的序号,放入优先队列,然后从优先队列中弹出最小的,这个最小值一定是所有和中最小的,同时压入A[a] + B[b+1],A[a]+B[b+1] = s-B[b]+ 阅读全文

posted @ 2013-08-28 16:01 allh123 阅读(205) 评论(0) 推荐(0) 编辑

2013年8月27日

POJ 3461 裸的KMP

摘要: 直接贴代码吧 1 #include 2 #include 3 char P[10004],T[1000006]; 4 int f[10004]; 5 int n,m; 6 void getfail() 7 { 8 f[0] = 0; 9 f[1] =0;10 for(int i=1; i<m; ++i)11 {12 int j=f[i];13 while(j && P[i] != P[j]) j = f[j];14 f[i+1] = P[i]==P[j] ? j+1:0;15 }16 }17 int KMP... 阅读全文

posted @ 2013-08-27 21:48 allh123 阅读(145) 评论(0) 推荐(0) 编辑

POJ 3233 Matrix Power Series 矩阵快速幂

摘要: 设S[k] = A + A^2 +````+A^k.设矩阵T =A[1]0EE这里的E为n*n单位方阵,0为n*n方阵令A[k] = A ^ k矩阵B[k] =A[k+1]S[k]则有递推式B[K] = T*B[k-1],即有B[k] = T^k*B[0],令S[0] 为n*n的0矩阵。矩阵快速幂求出即可·····还可以使用两次分治的方法····自行百度····贴代码: 1 #include 2 #include 3 int n,k,p,d;//d = 2*n 4 阅读全文

posted @ 2013-08-27 13:55 allh123 阅读(204) 评论(0) 推荐(0) 编辑

HDU 4686 矩阵快速幂 Arc of Dream

摘要: 由式子的性质发现都是线性的,考虑构造矩阵,先有式子,a[i] = ax * a[i-1] + ay; b[i] = bx*b[i-1] +by;a[i]*b[i] = ax*bx*a[i-1]*b[i-1] + ax*by*a[i-1] + bx*ay*b[i-1]+ay*by;s[i] = s[i-1] + a[i-1]*b[i-1];由此得到递推式 :设矩阵A=ax000ay0bx00byax*bybx*ayax*bx0ay*by0011000001矩阵B[i]=(a[i-1],b[i-1],a[i-1]*b[i-1],s[i-1],1)' (转置),B[i] =(a[i],b[i 阅读全文

posted @ 2013-08-27 12:16 allh123 阅读(217) 评论(0) 推荐(0) 编辑

2013年8月25日

HDU 4705 Y 树形枚举

摘要: 树形枚举--搜索题目描述:给你一棵树,要在一条简单路径上选3个不同的点构成一个集合,问能构成多少个不同的集合。解法:枚举所有结点,假设某个结点有n棵子树,每棵子树的结点个数分别为s1,s2,````sn.那么在选中该结点后,剩下的两个结点从子树上选,考虑顺序,则有方案数ans=s1*(sum(si)-s1)+s2*(sum(si)-s2)+```+sn*(sum(si)-sn),化简得ans=sum(si)^2-sum(si^2).实际上,另外两个点选了(1,2)和(2,1)对于集合{a,b,c}而言是一样的,所以方案数应该为ans/2。而一个结点的子节点的总和为n-1。只要求sum(si^2 阅读全文

posted @ 2013-08-25 20:33 allh123 阅读(150) 评论(0) 推荐(0) 编辑

HDU 4597 记忆化搜索

摘要: ²博弈取牌—记忆化搜索题目描述:有两副带有数字的牌,(数字>0)两人轮流取,取中了某张牌,自己的分数就加上牌上的数字,但只能从两端取,每人都会用最优的策略使得自己的分数最高。问A先取,他能得到的最高的分数。解法:记忆化搜索,对于第一、二副牌的左右端点分别为fr1,ta1,fr2,的情形,某个人能拿到的分数的最大值这次取走牌fr1,ta1,fr2,ta2中的最大值,牌的数目减1,问题规模被缩小。边界条件为当没有牌时为0。因为两个人都是这么思考,可抽象成一个人。当总分数为sum时,我能得到的分数会是sum-对手能拿到的分数。代码实现:intdp[N][N][N][N];//初始值为 阅读全文

posted @ 2013-08-25 17:44 allh123 阅读(249) 评论(0) 推荐(0) 编辑

HDU 4599 概率DP

摘要: 先推出F(n)的公式:设dp[i]为已经投出连续i个相同的点数平均还要都多少次才能到达目标状态。则有递推式dp[i] = 1/6*(1+dp[i+1]) + 5/6*(1+dp[1]).考虑当前这一次掷色子,有1/ 6的概率投的和前面的一样,有5/6的概率不一样,不一样就要重新投,就到了dp[1]的状态,这里投了一次,所以要加1.边界有dp[0] = dp[1]+1,dp[n] = 0;可以这么说,H[n]应该是6*F[n]的,随便YY一样。更严谨的话就是一样要去推,递推式如下,设dp[i]为已经连续i次投出1后平均还要多少次才能达到目标状态。有递推式dp[i] = 1/6*(dp[i+1]+ 阅读全文

posted @ 2013-08-25 17:40 allh123 阅读(813) 评论(0) 推荐(0) 编辑

2013年8月24日

HDU 4497 数论+组合数学

摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4497解题思路:将满足条件的一组x,z,y都除以G,得到x‘,y',z',满足条件gcd(x',y',x') = 1,同时lcm(x',y',x') = G/L.特判,当G%L != 0 时,无解。然后素数分解G/L,假设G/L = p1^t1 * p2^t2 *````* pn^tn。满足上面条件的x,y,z一定为这样的形式。x' = p1^i1 * p2^i2 *```* pn^in.y' = p1^j1 * p2^ 阅读全文

posted @ 2013-08-24 19:59 allh123 阅读(850) 评论(0) 推荐(0) 编辑

2013年8月19日

Codeforces 106 C 多重背包

摘要: 题目链接:http://codeforces.com/problemset/problem/106/C根据题意列出式子,设每种蛋糕做了xi个,则对于每种材料bi*xi 2 #include 3 #define INF 0x3f3f3f3f 4 #define N 1005 5 int f[N],s[N]; 6 struct bake 7 { 8 int val,we; 9 } p[12*N];10 int main()11 {12 int n,m,we,val,cnt=0;13 scanf("%d%d%d%d",&n,&m,&we,&val) 阅读全文

posted @ 2013-08-19 20:43 allh123 阅读(288) 评论(0) 推荐(0) 编辑

上一页 1 2 3 4 5 6 ··· 12 下一页

导航