Codeforces Round #259 (Div. 1)
A题:最大值为i的期望为(in?(i?1)n)?i/mn,那么总期望为∑m1(in?(i?1)n)?i/mn,然后化简一下公式,答案为m?∑m?11i/mn
B题:状压DP,只需要用到小于59的素数,一共有16个,dp[n][s]表示当前放到第n个数字,素数使用的集合为s的最小值,S[k]表示k数字对应会用掉哪几个素数,然后...
分类:
其他好文 时间:
2014-08-02 12:49:43
阅读次数:
284
http://acm.hdu.edu.cn/showproblem.php?pid=4906题意:N个数的序列,每个数可以选择填0-L,如果一个序列可以选出某些数,他们的和为K,那么这个序列就是”好序列“,给定N 2 #include 3 #include 4 using namespace st....
分类:
移动开发 时间:
2014-08-01 18:47:42
阅读次数:
292
Problem Description
A few days ago, Tom was tired of all the PC-games, so he went back to some old FC-games. "Hudson's Adventure Island" was his favorite which he had played thousands of times. But t...
分类:
其他好文 时间:
2014-08-01 10:53:21
阅读次数:
300
HDU 4906 Our happy ending
题目链接
题意:给定n个数字,每个数字可以是0-l,要选其中一些数字,然后使得和为k,问方案
思路:状压dp,滚动数组,状态表示第i个数字,能组成的数字状态为s的状态,然后每次一个数字,循环枚举它要选取1 - min(l,k)的多少,然后进行状态转移
代码:
#include
#include
typedef ...
分类:
移动开发 时间:
2014-08-01 02:29:11
阅读次数:
392
状压DP死活想不到啊,开始还以为是数据结构题,真是膜拜宋威大大。
包括点的矩形最小一定以这些点为顶点,所以枚举所有点对,构成所有状态。
由于不存在面积为0的矩形,所以当横纵坐标相同时得特判。
然后就是状压dp了。
#include
#include
#include
#include
#include
#include
#include
#include
using namespace s...
分类:
其他好文 时间:
2014-07-29 14:29:58
阅读次数:
217
poj2411:http://poj.org/problem?id=2411题意:给你1*2的方块,让你把n*m的房间填好有多少种方式。题解:状压dp。这一题,我是不会做了,看懂了题解之后,震惊了。这Dp只要找对状态方程,简直就是一种艺术啊。我深深的喜欢上DP了。好了。讲讲这一题吧。首先是状态方程f...
分类:
其他好文 时间:
2014-07-29 11:19:46
阅读次数:
238
poj1185:http://poj.org/problem?id=1185题意:这道题太经典了,看到题目就知道题意,故题意略。题解:经典的状压dp。以前觉得dp是个很难的东西,做了这一题之后发现,dp其实根本不难,真的,而且很好打。思维过程:拿到题之后,由于之前做过,所以知道是状压dp。接着想怎么...
分类:
其他好文 时间:
2014-07-29 10:43:36
阅读次数:
277
状态压缩是一个很广的概念,在OI中也有很多的应用,当我们把他应用到动态规划中,可以用来精简状态,节约空间,也方便转移。最常见的就是用二进制来表是状态,利用各种位移运算,就可以实现\(O(1)\)的转移。状压DP适用于“窄棋盘”上的DP,否则状态太多无法存下。POJ1185炮兵阵地题意:给一个\(N ...
分类:
其他好文 时间:
2014-07-27 23:17:19
阅读次数:
391
链接:http://poj.org/problem?id=3420
题意:给一个4*N(1 ≤ N ≤ 1e9)的矩形空间,并且给不限块数的1*2的多米诺骨牌,问是由多少种方式能把这个矩形空间填满。
思路:看到这种问题果断想到状压,虽然是在看矩阵的时候看到的这道题。dp[i][j]表示在第i行状态为j的情况下的填满方式数,j的二进制表示中0表示对应位置上一行的骨牌是竖放,或者对应位置的骨牌是横...
分类:
其他好文 时间:
2014-07-27 11:40:15
阅读次数:
269
状态压缩DP
dp[i][j]表示在i状态(用二进制表示城市有没有经过)时最后到达j城市的最小时间
转移方程dp[i][j]=min(dp[i][k]+d[k][j],dp[i][j])
d[k][j]是k城市到j城市的最短距离 要先用flody处理
#include
using namespace std;
int d[20][20],dp[1<<11][20];
int n,m;...
分类:
其他好文 时间:
2014-07-27 11:17:42
阅读次数:
176