摘要:
矩阵乘法题意:一个一维数组,全为0,对它进行一系列操作,包括某位+1,某位清零,交换某两位。将这一系列操作进行m次。问数组的最终情况。分析:数组的元素从第一位开始,把第0位附为1,我们构造一个n*n矩阵使得原1*n矩阵每乘以一次这个矩阵,得到的结果就相当于进行了一次一系列操作。然后用矩阵快速幂即可。构造矩阵的方法是:操作一,0行某列位置元素++;操作二,某列清零;操作三,交换两列。矩阵乘法需要优化: for (int i = 0; i < a.x; i++) for (int k = 0; k < a.y; k++) if (a.a[i][k]) for (int j = 0; j 阅读全文
posted @ 2011-07-18 20:39
undefined2024
阅读(931)
评论(0)
推荐(0)
摘要:
题意:给n个block涂4种颜色,要求其中red和green的block为偶数,其余随意。问有多少种涂法。分析:这题我们可以先认为是一道dp题,设f[maxn][4],f[i][j]表示有i个block时,green和red的奇偶性为状态j时(及把j化为二进制第一位表示green是否为奇数,第二位对应red)。则我们可以由f[i - 1]推出f[i]。递推的过程是将f[i-1]的各位进行一些加法运算并附给f[i]的对应位。这个过程我们可以用矩阵来解决。f[i-1]是一个1*4的矩阵,乘以一个4*4的矩阵之后得到一个1*4的矩阵即为f[i]。线代的知识这里就不说了。本题f[0]={1,0,0,0 阅读全文
posted @ 2011-07-18 16:42
undefined2024
阅读(774)
评论(0)
推荐(0)
摘要:
最小生成树,稀疏图用kruskal,O(ElogE)View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>using namespace std;#define maxr 50005#define maxn 20005struct Edge{ int u, v, w;} edge[maxr];int father[maxn];int n, m, r;int ans;bool operat 阅读全文
posted @ 2011-07-18 14:26
undefined2024
阅读(234)
评论(0)
推荐(0)
摘要:
简单题View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;#define maxn 105int vis[maxn], n, m, k;int f[maxn][maxn];int main(){ //freopen("t.txt", "r", stdin); memset(f, 0, sizeof(f)); for (m = 2; m <= 100; 阅读全文
posted @ 2011-07-18 13:46
undefined2024
阅读(228)
评论(0)
推荐(0)