HDOJ-1074(动态规划+状态压缩)】的更多相关文章

 1.小技巧 枚举集合S的子集:for(int i = S; i > 0; i=(i-1)&S) 枚举包含S的集合:for(int i = S; i < (1<<n); i = (i+1)|S) 2.训练题目 1.HDU 4628 Pieces http://acm.hdu.edu.cn/showproblem.php?pid=4628 题意: 给定一个(len<=16)的串,每次可删除一个回文子序列,问最少需要几次删完整个串 思路:简单状态压缩   dp[s]=mi…
题目链接:http://poj.org/problem?id=2923 题目的大概意思是,有两辆车a和b,a车的最大承重为A,b车的最大承重为B.有n个家具需要从一个地方搬运到另一个地方,两辆车同时开,问最少需要搬运几次? 我先想的是我由A车开始搬,搬运能装的最大的家具总重,然后状态压缩记录下搬运了哪些,然后再由B车搬运,状态压缩记录搬运了哪些.以此类推,直到状态满了. 以上方法TLE 然后,实在想不出来了,看了题解:http://blog.csdn.net/woshi250hua/articl…
题意:给你一个n*n的矩阵,让你从矩阵中选择一些数是的他们的和最大,规则是:相邻的两个数不能同时取,位置为(i,j)的数与(i+1,j),(i-1,j),(i,j+1),(i,j-1),(i+1,j+1),(i+1,j-1),(i-1,j+1),(i-1,j-1)相邻. 思路:很常见的状态压缩dp,设dp[i][j]表示前i行,第i行状态为j时的最大和,那么dp[i][j] = max(dp[i-1][k]) + (该状态下取第i行的那些数的和). #include<cstdio> #incl…
炮兵阵地 Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图.在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队):一支炮兵部队在地图上的攻击范围如图中黑色区域所示: 如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格.图上其它白色网…
题意: 给你N个课程, 每个课程有结束的时间 , 和完成这门课程需要的时间 超过课程结束ed时间,每一天就要花费 1点绩点: 然后要求你安排如何做课程使得花费的绩点最少 (看了博客后才发现状态压缩很⑥) 用二进制表示状态 + 前驱标记 #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<stack> using namespace std;…
Description 蜘蛛牌是windows xp操作系统自带的一款纸牌游戏,游戏规则是这样的:只能将牌拖到比她大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么这些牌也跟着一起移动,游戏的目的是将所有的牌按同一花色从小到大排好,为了简单起见,我们的游戏只有同一花色的10张牌,从A到10,且随机的在一行上展开,编号从1到10,把第i号上的牌移到第j号牌上,移动距离为abs(i-j),现在你要做的是求出完成游戏的最小移动距离.   Input 第一个输入数据是T,表示数据的组…
Doing Homework HDOJ-1074 1.本题主要用的是状态压缩的方法,将每种状态用二进制压缩表示 2.状态转移方程:dp[i|(1<<j)]=min(dp[i|(1<<j)],dp[i]+max(0,total+homework[j].time-homework[j].deadline)) 3.dp[i]表示i状态下时,所需要扣除的最少分数,total表示要到达i状态下,所用的所有时间. 4.本题还需要使用一个pre数组,用来记录路径. 5.这里还涉及到很多的二进制运…
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3662 之前写过这道题,结果被康神吐槽说代码写的挫. 的确,那时候想法太挫了. 题意: 给你三个数n,m,k. 问你存在多少个数列 a1,a2,...,ak,使得他们的和为n,他们的最小公倍数为m. 想法一: 因为 lcm(a1,a2,...,ak)=m,所以a1,a2,a3,...,ak都是m的约数. 因此预处理出来m的约数,记在w[i]里. 设计状态dp[i]…
有5个砖块..加上一个空着不放..那么有6种状态..所以很明显的可以用6进制的状态DP... 不过这么做..我觉得我已经能优化的都优化了...还是超时..一看数据范围是100*6..打表先AC了.. 看有大神用3进制状态DP水过..Orz...看了好久没看懂...觉得自己状态DP还是很表面~~ Program: #include<iostream> #include<stdio.h> #include<string.h> #include<set> #inc…
题目链接:http://poj.org/problem?id=1143 题目描述: 代码实现: #include <iostream> #include <string.h> #include <math.h> #include <algorithm> #include <stdlib.h> using namespace std; <<]; int n; ]; ]; //这个函数是把这个二进制数列变成数字,就是将数列压缩成数字来 i…