摘要: http://codeforces.com/contest/296/problem/D在讲这道题之前我先现简要介绍一下Floyd—Warshall算法,方便大家更好的了解这道题。Floyd—Warshall算法的原理是动态规划。设D[i][j][k]为从i到j只以1~k中节点为中间结点的最短路径长度,则:(1)若最短路径经过点k,那么D[i][j][k]=D[i][k][k-1]+D[k][j][k-1](2)若最短路径不经过点k,那么D[i][j][k]=D[i][j][k-1]因此D[i][j][k]=min(D[i][k][k-1]+D[k][j][k-1],D[i][j][k]=D[i 阅读全文
posted @ 2013-04-12 03:16 aiiYuu 阅读(460) 评论(2) 推荐(0) 编辑
摘要: http://codeforces.com/contest/296/problem/C线段树的成段更新模板提对于k的情况可以先行处理,具体看代码因为很久以前学线段树只会了单点更新,但是知道有这样的题,于是果然在notonlysuccess大神的博客上找到了模板,改了一下accept了。View Code #include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define lson l , m , rt <& 阅读全文
posted @ 2013-04-12 03:01 aiiYuu 阅读(329) 评论(2) 推荐(0) 编辑
摘要: http://codeforces.com/contest/296/problem/B对于两个字符串ch1和ch2,开四个数组a[i],b[i],c[i],d[i]分别表示 所有的情况数 、ch1[i]<=ch2[i]的情况数、ch1[i]>=ch2[i]的情况数、ch1[i]==ch2[i]的情况数,那么根据容斥原理,有ans =∏a[i] -∏b[i] -∏c[i] +∏d[i]。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#i 阅读全文
posted @ 2013-04-12 02:56 aiiYuu 阅读(281) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1830题目大意:有N个相同的开关,每个开关都与某些开关有着联系,每当你打开或者关闭某个开关的时候,其他的与此开关相关联的开关也会相应地发生变化,即这些相联系的开关的状态如果原来为开就变为关,如果为关就变为开。你的目标是经过若干次开关操作后使得最后N个开关达到一个特定的状态。对于任意一个开关,最多只能进行一次开关操作。你的任务是,计算有多少种可以达到指定状态的方法。(不计开关操作的顺序) 将方程组做成矩阵形式,然后利用三种初等矩阵变换,得到上三角矩阵,最后回代得到解集。#include <cstdio>#include <i 阅读全文
posted @ 2013-04-11 12:01 aiiYuu 阅读(201) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=3529题目大意:最少需要几个炸弹(先后放)能够把所有的墙炸掉。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>#include <set>#include <map>#include <cmath>#include <queue>using namespace std;t 阅读全文
posted @ 2013-04-10 23:54 aiiYuu 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 水题,请忽略~~~~~~http://www.codeforces.com/problemset/problem/4/A 一个炎热的夏天Pete和他的朋友Billy决定去买西瓜。他们选择了在他们看来最大最圆的西瓜,然后他们把西瓜称重的到了示数为w千克。他们跑回了家,非常的渴,于是他们决定切西瓜,然而他们面临着一个严峻的问题。 Pete和Billy都是偶数的疯狂爱好者,这就是为什么他们决定把西瓜且成两份并且每分的重量都是偶数的原因。输入西瓜的重量w,如果能按照上述分法把西瓜分成两个偶数重量,输出"YES",否则输出"NO"。http://www.codef 阅读全文
posted @ 2013-04-10 23:35 aiiYuu 阅读(201) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3735题目大意:重复训练一只猫m轮,在每轮中都有k次操作;有三种不同的操作类型:1、给第i只猫多一颗豆2、让第i只猫把它所拥有的都全吃了3、交换两只猫手中的豆 用矩阵乘法,开一个(n+1)*(n+1)大的数组A。用A.a[0][i]记录第i只猫的实际豆拥有量,则1、给第i只猫多一颗豆 → A.a[0][i] ++2、让第i只猫把它所拥有的都全吃了→ for all j , A.a[j][i] = 03、交换两只猫a和b手中的豆→ for all i ,swap(A.a[i][a] , A.a[i][b])这里矩阵乘法有一个优化;即 ... 阅读全文
posted @ 2013-04-10 02:26 aiiYuu 阅读(222) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3420题目大意:求在一个4*N(N<=1000000000)的格子中放1*2的格子的方案数。 首先推导出公式f(n)=f(n-1)+5f(n-2)+f(n-3)-f(n-4),然后将其用矩阵乘法进行优化。 矩阵的转换看这里:http://www.cnblogs.com/aiiYuu/gallery/image/127131.html 然后用矩阵连乘进行运算,将复杂度降到了O(logN)。#include <cstdio>#include <cstring>#include <iostream>#in 阅读全文
posted @ 2013-04-10 01:27 aiiYuu 阅读(225) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3070题目大意:用矩阵乘法求Fibonacci数列#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>#include <set>#include <map>#include <cmath>#include <queue>using namespace std;template <class T> 阅读全文
posted @ 2013-04-09 22:05 aiiYuu 阅读(185) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2663dp[i][j]表示前i-1行全部都填满的时候j对应的状态(如下)/*0 -- 0001 -- 0012 -- 0103 -- 0114 -- 1005 -- 1016 -- 1107 -- 111*/然后因为情况数很少,所以就一一枚举出来了状态转移方程: dp[i][1] = dp[i-1][6]; dp[i][2] = dp[i-1][5]; dp[i][4] = dp[i-1][3]; dp[i][3] = dp[i-1][7] + dp[i-1][4]; dp[i][5]... 阅读全文
posted @ 2013-04-08 11:58 aiiYuu 阅读(298) 评论(0) 推荐(0) 编辑