
POJ
文章平均质量分 79
深蓝色的猫
一个努力成长为大牛的蒟蒻程序媛
展开
-
UVa OJ 10587/POJ 2528
1、经典的离散化题目,用线段树加速。2、离散化就是将无限空间(或很大空间)的点映射到有限区域(或很小区域),说得通俗点就是“只保存我们需要的一些点”,一般指区间端点。具体见注释。#include#include#include#includeconst int MAX=20010;using namespace std;int c,n,ls[MAX];struc原创 2014-01-28 17:20:33 · 301 阅读 · 0 评论 -
POJ 1830 开关问题
1、本题用高斯消元法做,构造方程是难点。用G【i】【j】表示灯i是否被灯j控制,x【i】表示是否按下开关i,则本题相当于解异或方程组:e[a] = (xa * G[a][a]) ^ (xb * G[a][b]) ^ (xc*G[a][c]) ^ f[a]e[b] = (xa * G[b][a]) ^ (xb * G[b][b]) ^ (xc*G[b][c]) ^ f[b]e[c] =原创 2014-02-05 19:28:58 · 279 阅读 · 0 评论 -
POJ 1077 Eight
1、第一次写八数码问题。。。练习了康托展开和逆康托展开以及bfs。2、状态压缩已经不是难点了,难点在于路径记录,一定要用数组,我刚开始用了指针错惨了,注意,比如从A状态到B状态,记录方向的dir应该保存在B中,为什么呢?因为A对应四个子状态!如果记录在A中,就会覆盖掉原有的状态,就会出错。3、还有就是vis数组,一旦加入队列就立刻设为true。另外,只有确定了加入队列才能修改p数组,否则会原创 2014-02-08 02:21:27 · 312 阅读 · 0 评论 -
POJ 3420 Quad Tiling
1、本题考查状压DP+矩阵乘法优化。先用dfs求出状态转移的可达矩阵,然后用矩阵快速幂求出矩阵的n次方,an【0】【0】即为答案。2、更加深刻地理解了状态转移。所谓状态转移就是某个状态通过一系列操作到达另一个状态(或者说“局面”,“情况”)。比如1011,有没有办法让它变为0100呢?有的,答案就是在那个唯一的0的位置摆上一个骨牌,那么新的一行也就只有那个位置是填满的,其余位置都是空的,即01原创 2014-02-12 03:45:06 · 362 阅读 · 0 评论 -
POJ 3070 Fibonacci
1、矩阵快速幂,将矩阵写成类会更易编程。一次AC~#include#includeusing namespace std;const int MAXN=2;const int MAXM=2;struct Matrix{ int n,m; int a[MAXN][MAXM]; void clear(){ n=m=0; memset(a,0,si原创 2014-02-12 00:17:14 · 323 阅读 · 0 评论 -
POJ 2970 The lazy programmer
1、本题用贪心法以及优先队列,首先按照截止日期排序,然后用一个变量T记录时间,若T大于截止日期,则利用优先队列,选择当前最大的a值来将T减小。如果将b用完了,则将这个a出队。这样一直减,直到T等于截止日期。2、要注意的是每次队列都要清空。3、比较坑爹的是输出的时候用%lf是错的,改成%f就对了。。。原因似乎是历史遗留问题,当且仅当在POJ且用g++时,会出错,用c++是不会出错的。所以以后原创 2014-03-30 22:25:15 · 366 阅读 · 0 评论 -
POJ 1469 COURSES
1、求二分图最大匹配,看是否等于p。用匈牙利算法(#include#includeusing namespace std;int g[110][310],from[310],vis[310];bool match(int x){ for(int i=1;i if(!vis[g[x][i]]){ vis[g[x][i]]=1; if(原创 2014-04-12 23:10:50 · 285 阅读 · 0 评论