2012年8月6日

POJ 2411 Mondriaan's Dream 状态压缩 搜索

摘要: 题意:求用1 * 2 的矩行拼h * w的矩阵方法数(h,w <=11)算法:1.朴素算法,根据关系,枚举由于在做第i行dp时必须完全覆盖第i-1行,只要抓住这个条件不放就行。1、如果第i行中有0,则第i-1行一定为1;2、如果第i行中为1的x列第i-1行为0,说明第i行肯定是竖着放的;3、如果第i行中为1的x列第i-1行的该列也为1,可能性只有一个,第i行是横放的,所以第i行的x+1列也必须为1,又因为第i行的x+1列为1是因为横着放的,所以第i-1行的x+1列也必须为1。View Code //自己没写枚举暴力的代码了,速度很慢2000ms,代码来自//http://gisyhy.b 阅读全文

posted @ 2012-08-06 17:23 more think, more gains 阅读(178) 评论(0) 推荐(0) 编辑

HDU 3811 炮兵阵地

摘要: 题意:中文题http://poj.org/problem?id=1185算法:N <= 100;M <= 10。枚举每行状态,1表示该行放炮兵,0表示不放,相邻两位不能有1,这样的状态才合法特殊处理第一行,第二行状态。int cow[110];//保存行状态信息 int num[100]; //保存状态数int sum[100]; //保存状态对应的1,即炮兵数int dp[110][64][64]; //dp方程, dp[i][j][k]表示第i行状态为j,上一行状态为k枚举后面的行。由前往后推,num[i]&num[j] == 0 num[i]&num[k] = 阅读全文

posted @ 2012-08-06 16:29 more think, more gains 阅读(258) 评论(0) 推荐(0) 编辑

POJ 1170 shopping offers 状态压缩 记忆化搜索

摘要: 题意:给你n件物品,三个参数描述该物品,编号,数量(<=5),每件价格。 n <= 5然后给你s种方案,第一个数位商品种类对数,然后是该商品型号,数量,最后一个数是该方案价格。求把所有物品买完最低的价格。算法1:商品种类很少,<= 5开个五维数组int dp[5][5][5][5][5],dp[a][b][c][d][e][f],表示第1中物品买a件,第2种物品买b件,。。,第5种物品买f件所需要价格然后DFS枚举每一种方案,记忆化搜索,即可以算出最优解。View Code #include<stdio.h>#include<stdlib.h>#inc 阅读全文

posted @ 2012-08-06 15:48 more think, more gains 阅读(295) 评论(0) 推荐(0) 编辑

HDU 3811 DP状态压缩

摘要: 算法:dp[state][n]表示该状态前N位不是完美排列的个数。步骤:1.初始化第 0 位值2.第i位从第i-1位推出,每一位,枚举(1<<N)种状态。3.答案就是N!- dp[(1<<N)-1][N-1]View Code #include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>#include<vector>#include<string>#include<math.h>#include<m 阅读全文

posted @ 2012-08-06 14:51 more think, more gains 阅读(155) 评论(0) 推荐(0) 编辑

multimap 一对多。。给力啊

摘要: View Code // multimap::lower_bound/upper_bound#include <iostream>#include <map>using namespace std;int main (){ multimap<char,int> mymultimap; multimap<char,int>::iterator it,itlow,itup; mymultimap.insert(pair<char,int>('a',10)); mymultimap.insert(pair<char,i 阅读全文

posted @ 2012-08-06 09:13 more think, more gains 阅读(232) 评论(0) 推荐(0) 编辑

导航