第一次做状压感觉那一长串for显示了这是个多么暴力的算法呢。。。1A了倒是挺顺的#include#include#include#include#include#include#include#include#define INF 0x3fffffff#define pb push_back#def...
分类:
其他好文 时间:
2015-05-08 21:53:11
阅读次数:
122
基础的状压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
题目大意是告诉你要修n门课,每门课有一个权值w[i], 在第k天修该课程讲获得k*w[i]的学习点数,给出了课程与先修课程的关系,要修该课程必须修完先修课程。问最多能学到多少点数。
非常简单的一道状压dp(一开始我还误导队友写成两维的去了 T^T);
dp[s] : s 的二进制存放的是已经选择的课程,在该状态下的能获得的最大的点数。
这时如果再学一门课程k,将转移到状态ss (...
分类:
其他好文 时间:
2015-05-07 08:57:10
阅读次数:
163
http://codeforces.com/gym/100676题目大意是告诉你要修n门课,每门课有一个权值w[i], 在第k天修该课程讲获得k*w[i]的学习点数,给出了课程与先修课程的关系,要修该课程必须修完先修课程。问最多能学到多少点数。非常简单的一道状压dp(一开始我还误导队友写成两维的去了...
分类:
其他好文 时间:
2015-05-06 22:46:52
阅读次数:
155
题意: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
你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关。在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再吃)。 宝物一共有n种,系统每次抛出这n种宝物的概率都相同且相互独立。也就是说,即使前k-1次系统都抛出宝.....
分类:
其他好文 时间:
2015-05-05 21:42:56
阅读次数:
108
在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子。 好像若干月前非常Naive地去写过DFS... 然后其实作为状压DP是一道非常好的题啦>0 do14 begin15 i...
分类:
其他好文 时间:
2015-05-05 21:27:12
阅读次数:
141
题目描述 Description
在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子。
输入描述 Input Description
只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K <= N * N)
输出描述 Output Description
方案数。
样例输入...
分类:
其他好文 时间:
2015-05-02 11:13:30
阅读次数:
195
给你一个n*n的格子的棋盘,每个格子里面有一个非负数。
从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的和最大。
两个11不相零的二十位 二进制一共有17000个,这题数据比较水,循环两次 居然没超时。
做法:dp[cur][j],cur滚动数组,j表示第j个 符合要求的 二进制数。dp[cur][j]为当前行,j状态 和的最大值。然后不断加,然后上下行不排除的转移下来就可以了。...
分类:
其他好文 时间:
2015-05-01 00:41:40
阅读次数:
114
标准的TSP问题
m*n矩阵,有不超过10个需要走到的点,给出起点,问走最少的步子把所有点走完
BFS出每个必须走到的点的最短距离
然后状压DP即可
#include "stdio.h"
#include "string.h"
#include "queue"
using namespace std;
const int dir[4][2]={ {1,0},{-1,0},{0,1},{0...
分类:
其他好文 时间:
2015-04-28 21:08:19
阅读次数:
145