状态压缩
big up
这个作者很懒,什么都没留下…
展开
-
uva11008
题目大意: 有n棵树,需要砍掉m棵数,可以用一个扫描光朝一个方向射去,那么这个方向直线上的所有树都会被砍掉,问需要最少几个这种光。思路: 位运算 状态压缩 记忆化搜索 要判断三棵树是否在同一斜率上。代码:#include <iostream>using namespace std;#include <stdio.h>#include <cstring>#define N (1 << 1原创 2016-03-05 13:49:22 · 248 阅读 · 0 评论 -
uva11008 附
感觉这个人写得很不错#include <stdio.h>#include <string.h>#define INF 1000000000#define MAXN 20#define MAXS 1<<18int n,m,c;int x[MAXN],y[MAXN];int s[MAXN][MAXN];int f[MAXS];int dp(int ss){ int count转载 2016-03-05 13:53:13 · 281 阅读 · 0 评论 -
uva10817
题目大意: 这间学校开设S门课,给出校长已经有的师资n,然后再给出m个应聘者,每门课至少有两名任课老师,求最少需要的雇佣工资。思路: 01背包问题,要嘛选这名老师教这门课要嘛不选。 将状态压缩。 dp[i][k]表示第i种状态第k个应聘者时可以有的最低雇佣工资。 假设有4门功课,每门功课有一个任课老师,表示为00001111,如果第一门有两个任课老师表示为00011110。有两个以上任课老原创 2016-03-07 16:09:22 · 810 阅读 · 0 评论 -
uva10651
题目大意: 类似于跳棋,求最后剩下几个。思路: 位运算+记忆化搜索 状态压缩代码:#include <iostream>using namespace std;#include <stdio.h>#include <cstring>const int MAXN = 4100;int vis[MAXN],_min;char s[15];bool check(int k,int i)原创 2016-02-28 18:58:01 · 271 阅读 · 0 评论 -
uvalive4490(状态压缩 + dp)
题目大意: 从左到右给出n本数的高度和最多可以抽取的书本的数量k,如果书本与相邻的书本的高度不相同的话就是一个段,段越多混乱度就越高。求最低的混乱度。思路: dp[i][j][s][end]表示前i本书操作了j次,剩下的书的状态为s,最后一本书是end的最低的混乱度。 那么对于一本书有两种情况: 1. 跟其前面的书籍的高度是一样的 那么dp[i][j][s][end] = min(dp[i原创 2016-04-26 22:21:23 · 502 阅读 · 0 评论 -
uva11795
题目大意: 给出有几个怪兽以及初始的可以打的怪兽的二进制序列。为1的就是可以打的为0的就是不可以打的。 打死一只怪兽后你就可以用它的武器去打特定的怪兽。 问最多有几种方案。思路: 状态压缩DP。 S[i]表示的是当死的怪兽的状态为i的时候所获得的武器可以打死哪些怪兽。 weapon[i]表示当打死怪兽i的时候所可以获得的武器。 dp[i]表示当死的怪兽的状态为i的时候最多可以有几种方案原创 2016-04-19 20:10:33 · 636 阅读 · 0 评论