基础的状压DP,因为是将状态压缩到一个整数中,所以会涉及到很多比较巧妙的位运算。我们可以先把输入中每行的01压缩成一个整数。判断一个状态是否有相邻1:如果 x & (x 2 #include 3 4 const int maxn = 13; 5 const int M = 100000000;...
分类:
其他好文 时间:
2015-05-07 11:52:42
阅读次数:
108
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define INF 100000000
using namespace std;
int ans[30];
int a[30];
int d[(1<<20)+10];
i...
分类:
其他好文 时间:
2015-05-06 23:08:40
阅读次数:
193
DescriptionSquares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, after producing the drawings in his 'toilet series' (...
分类:
其他好文 时间:
2015-05-06 19:39:15
阅读次数:
248
dp+状态压缩 1 #include 2 using namespace std; 3 double p[23]; 4 double dp[1=0; i--)14 {15 dp[i]=1.0;16 double sum=0.0;17 ...
分类:
其他好文 时间:
2015-05-06 06:51:22
阅读次数:
153
题意:n*m大的迷宫 ,有p种钥匙。钥匙最多有10种,所以可以用状压表示门需要钥匙的状态, 还有已经拥有哪几把钥匙的状态。
然后下来一个k,然后k行表示 (x1,y1),(x2,y2)直接有门或者墙。 如果g==0 ,就是有墙, 如果g>0 表示有门,且门需要第g把钥匙才能开。
然后下来一个s,然后s行,表示(x,y)这个点有 第g把钥匙。
问从(1,1)到(n,m)最少几步。
做法:状压, 每个点有四个方向,记录能否通过的状态, 门的话 标记为-1, 0,表示不用钥匙,>0 的话,哪位上是1,...
分类:
其他好文 时间:
2015-05-05 23:59:50
阅读次数:
360
题意:给定mxn的棋盘,要往其中放d枚棋子,其中,一枚棋子的上下左右四个位置不能再放棋子。求所有合法的放置状态 ( 0= n , 这个递推棋盘就有 m行 ,每行至多有 2^n-1个状态数。其实,没有这么多!按照题意,每个1的上下左右不能有1。对于一行,只知左右,所以把有连续1的状态排除. t为剩下的...
分类:
其他好文 时间:
2015-05-05 23:47:38
阅读次数:
188
合并游戏 题目链接
题意 : n个石子, 给你一个n*n矩阵, A[i][j]表示第i个和第j个合并蹦出的金币值, 合并完石子j消失。求合并所有石子后,所得的最大金币数。
分析 :
1、 题中给的数据范围 n(1<=n<=10) 也就是说最多10个石子, 那么我们不妨用一个二进制串来表示合并的状态,1表示没被合并,0表示合并后消失了,例如(1001)四个石子第2、3个被合并了。
2、...
分类:
其他好文 时间:
2015-05-05 08:56:28
阅读次数:
107
题意 : n个石子, 给你一个n*n矩阵, A[i][j]表示第i个和第j个合并蹦出的金币值, 合并完石子j消失。求合并所有石子后,所得的最大金币数。分析 : 1、 题中给的数据范围 n(1(1100, 1001, 0101) , 1011 —> (1010, 1001, 0011) , 01...
分类:
其他好文 时间:
2015-05-04 23:36:44
阅读次数:
172
#include
using namespace std;
#define INF 0x7ffffff
#define maxn 20
int n;
int dp[1<<maxn][maxn];
int d[maxn][maxn];
int dfs(int S, int v)
{
if(dp[S][v] != -1) return dp[S][v];
if(S==(1<<...
分类:
其他好文 时间:
2015-05-04 22:06:40
阅读次数:
164
题意: 洛克人最初只有一种武器 “Mega Buster”(这种武器可以消灭特定的一些机器人),你需要按照一定的顺序消灭 n 个其他机器人。每消灭一个机器人你将会得到他的武器(也可能没有得到武器),而这些武器可以消灭特定的机器人。你的任务是计算出消灭所有机器人的顺序总数。注意:一个机器人的武器可能可以消灭自己,但这对最终答案没有影响,因为必须先消灭这个机器人才能够得到他的武器。
思路:n 的范围为 [1,16],可以用状态压缩DP来做,用二进制保存状态。时间复杂度为 O(n*2^n) 。首先用 weapo...
分类:
其他好文 时间:
2015-05-04 20:19:43
阅读次数:
122