随笔分类 -  状态压缩DP

摘要:不说了,爆内存好几次,后来醒起状态有重复。。。状压+TSP#include #include #include #include #include #define LL long longusing namespace std;//#pragma comment(linker, "/STACK:10... 阅读全文
posted @ 2015-09-23 11:01 chenjunjie1994 阅读(168) 评论(0) 推荐(0)
摘要:其实是一道状态DP题。都是行与行之间的转移,可以知道,当某j列中有一个象,如果存在情况i-1行j-1列有象而i,j-1位置无象则不可放,或者i-1,j+1有而i,j+1无同样不可放。使用快速状态转移#include #include #include #include #include #inclu... 阅读全文
posted @ 2015-09-17 16:00 chenjunjie1994 阅读(222) 评论(0) 推荐(0)
摘要:状态压缩DP,把切割出的面积做状态压缩,统计出某状态下面积和。设f(x,y,S)为在状态为S下在矩形x,y是否存在可能划分出S包含的面积。若S0是S的子集,对矩形x,y横切中竖切,对竖切若f(x,k,S0)且f(x,y-k,S^S0)为真,则为真,对横切同样。然后枚举S的子集即可。可以用记忆化搜索。... 阅读全文
posted @ 2015-06-02 12:40 chenjunjie1994 阅读(460) 评论(0) 推荐(0)
摘要:很明显的状态压缩思想了。把全集分组,枚举每个集合的子集,看一个子集是否能覆盖所有的点,若能,则f[s]=max(f[s],f[s^s0]+1)。即与差集+1比较。这种枚举集合的思想还是第一次遇到,果然太弱了。。。。~~~~其中枚举集合for(s0=s;s0;s0=(s0-1)&s)#include ... 阅读全文
posted @ 2015-06-01 11:56 chenjunjie1994 阅读(862) 评论(0) 推荐(0)
摘要:简单状压DP,忘 了初始化,忘 了&和==的优先级,坑了我十几个WA。#include #include #include #include using namespace std;int dp[110][222][222];int row[110];int status[1>=1; } retur... 阅读全文
posted @ 2015-04-12 12:00 chenjunjie1994 阅读(288) 评论(0) 推荐(0)
摘要:也算难题,难在如何处理有些点可以无限次经过 问题。 这道题,其实很容易想到二分+TSP的状态压缩,但在处理上述问题时,确实没想到。题解是处理每一个Y或G或F点到其他YGF点的距离,BFS,这样就出现一个点只访问一次,而且即便在原图上重复经过某点,在重建的图也不会体现出来了。绝!#include #i... 阅读全文
posted @ 2015-04-02 22:13 chenjunjie1994 阅读(158) 评论(0) 推荐(0)
摘要:题目中说明每个城市至少要走一次,至多走2次,因此要用到三进制压缩,然后就是状态转移方程了。这道题就处理三进制的地方麻烦一点。同时注意,在选择最小长度时,一定是要每一个点都经过至少一次的,即是状态的每一个三进制位均 >=1.#include #include #include #include usi... 阅读全文
posted @ 2015-03-31 22:00 chenjunjie1994 阅读(175) 评论(0) 推荐(0)
摘要:设dp状态为dp[i][j]为当前访问过的结点状态为i且当前停留点为j时的最短路径。用二进制存存储访问过的状态,访问过为1,否则为0。#include #include #include #include using namespace std;const int inf=(1dp[tmp.i][t... 阅读全文
posted @ 2015-03-31 20:29 chenjunjie1994 阅读(130) 评论(0) 推荐(0)
摘要:经典的状态压缩DP题了。做了前面两题,就不感觉难了。#include #include #include #include using namespace std;int stack[1>1,r2=st>>2; if(l1&i){flag=false; break;} if(l2&i){... 阅读全文
posted @ 2015-03-31 19:55 chenjunjie1994 阅读(124) 评论(0) 推荐(0)
摘要:简单的状态压缩。#include #include #include #include using namespace std;const int Status=1>=1;// coutm-1){ // coutinfer) continue; if((stack[p]&G[i+1])... 阅读全文
posted @ 2015-03-31 11:10 chenjunjie1994 阅读(105) 评论(0) 推荐(0)
摘要:好题。果然好题,经典了。列一个计划,清明前做好状压DP。之后就刷剩下的MULTI。#include #include #include #include using namespace std;const int Status=(1>2))||(i&(j>>2))) crashpo[i][j]=tr... 阅读全文
posted @ 2015-03-30 21:58 chenjunjie1994 阅读(182) 评论(0) 推荐(0)