Fork me on GitHub

05 2014 档案

摘要:混合三种背包问题。定义:dp[i][k]表示体积为k的时候,在前i堆里拿到的最大价值。第一类,至少选一项,dp初值全赋为负无穷,这样才能保证不会出现都不选的情况。dp[i][k] = max(dp[i][k],max(dp[i-1][k-c]+g,dp[i][k-c]))其中:dp[i][k]是不选... 阅读全文
posted @ 2014-05-31 20:58 whatbeg 阅读(306) 评论(0) 推荐(0)
摘要:定义:1.dp[u][1]表示u这个点设立糖果发放点且u这棵子树满足条件时的最少糖果点数2.dp[u][0]表示u这个点不设立发放点且u这棵子树满足条件时的最少糖果点数设v1,v2……vn为u的子节点,则转移方程:dp[u][1]= sum(min(dp[vi][1],dp[vi][0]) )+1;... 阅读全文
posted @ 2014-05-31 20:57 whatbeg 阅读(265) 评论(0) 推荐(0)
摘要:环状合并石子问题。环状无非是第n个要和第1个相邻。可以复制该行石子到原来那行的右边即可达到目的。定义:dp[i][j]代表从第i堆合并至第j堆所要消耗的最小体力。转移方程:dp[i][j]=min(dp[i][k]+dp[k+1][j]+sum[i][j]);复杂度:O(n^3)。可考虑四边形优化。... 阅读全文
posted @ 2014-05-31 20:56 whatbeg 阅读(489) 评论(0) 推荐(0)
摘要:将方格的摆放分成两种:1.水平摆放:此时所占的两个格子都记为1。2.竖直摆放:此时底下那个格子记为1,上面那个记为0。这样的话,每行都会有一个状态表示。定义:dp[i][s]表示考虑已经填到第i行,这一行状态为s的方法数转移:dp[i][s] = dp[i][s]+dp[i-1][s'] (s'为上... 阅读全文
posted @ 2014-05-31 20:47 whatbeg 阅读(385) 评论(0) 推荐(1)
摘要:定义:cnt[L][K]表示长度为L,最高位为K的满足条件C的个数。首先预处理出cnt数组,枚举当前长度最高位和小一个长度的最高位,如果相差大于2则前一个加上后一个的方法数。然后给定n,计算[1,n-1]中满足条件C的数的个数。设有K位数,则不足K位的累加,然后枚举K位数的情况,从高位到低位枚举,每... 阅读全文
posted @ 2014-05-31 20:46 whatbeg 阅读(332) 评论(0) 推荐(0)
摘要:CF原题由题可知,n,m太大,无法开出dp[n][m]的数组。观察发现s/e最大为300,也就是说,选用第一种操作的次数不会超过300。于是定义dp[i][j],第一个串的前i个数,使用了j次第一种操作的时候,第二个串最少删了多少个数。转移有两种情况:1.当前位置不删,这时dp[i][j]=dp[i... 阅读全文
posted @ 2014-05-31 20:45 whatbeg 阅读(323) 评论(0) 推荐(0)
摘要:定义:dp[i][j]为状态为j时,第i行符合条件的状态数转移方程:dp[i][j] += dp[i-1][t] //t为上一行状态,与当前行不冲突。从第一行开始向下枚举,每次枚举当前行的状态和上一行的状态,如果不相邻或者未被地雷占据并且两行的关系是合法的,则加上方法数。最后res = SUM(d... 阅读全文
posted @ 2014-05-31 20:44 whatbeg 阅读(292) 评论(0) 推荐(0)
摘要:LRJ黑书上的例题。化简均方差公式:均值的平方一定,所以只需让矩形的总分的平方和最小即可。定义:dp[k][x1][y1][x2][y2],以(x1,y1)为左上角坐标,(x2,y2)为右下角坐标的矩形,切割K次以后得到的k+1块举行的总分平方和的最小值转移方程:(分成横割和竖割)dp[k][x1]... 阅读全文
posted @ 2014-05-31 20:43 whatbeg 阅读(351) 评论(0) 推荐(0)
摘要:定义dp[i][j]表示第i天手中有j股股票时,获得的最多钱数。转移方程有:1.当天不买也不卖: dp[i][j]=dp[i-1][j];2.当天买了j-k股: dp[i][j]=max(dp[r][k]+(j-k)*Ap[i]); (r=1,所以i>w+1时才能转移,这是i#include #in... 阅读全文
posted @ 2014-05-31 20:42 whatbeg 阅读(414) 评论(0) 推荐(0)
摘要:设FA为A的牌中数字异或和,FB为B的。则有性质:ans = (所有的(A&B=0)个数 + (FA=FB且A&B=0)的个数)/2。即所有的FA>FB的个数(除2是因为这里FA>FB的个数等于FA#include #include #include #include using namespace... 阅读全文
posted @ 2014-05-31 20:41 whatbeg 阅读(420) 评论(0) 推荐(0)
摘要:题意:即求给定n个数字(a1,a2,……an),不改变序列,分成M份,使每一份和的乘积最大。思路:dp[i][j]表示把前i个数字,分成j份所能得到的最大乘积。转移方程:dp[i][j] = max{ dp[k][i-1]*sum(k+1,j) } 其中显然j#include #include #i... 阅读全文
posted @ 2014-05-31 20:40 whatbeg 阅读(320) 评论(0) 推荐(0)
摘要:A.爱管闲事http://www.cnblogs.com/whatbeg/p/3762733.htmlB.轻音乐同好会C.温泉旅馆http://www.cnblogs.com/whatbeg/p/3762735.htmlD.摩天轮E.生日礼物http://www.cnblogs.com/whatbe... 阅读全文
posted @ 2014-05-31 19:21 whatbeg 阅读(236) 评论(0) 推荐(0)
摘要:B.Battle for Silver定理:完全图Kn是平面图当且仅当顶点数n#include #include #include #include using namespace std;#define N 100000000int mp[500][500];int w[500];int main... 阅读全文
posted @ 2014-05-25 22:23 whatbeg 阅读(257) 评论(0) 推荐(0)
摘要:这种有限制的类棋盘着色问题一般可以用指数型母函数来解决,设Hn表示这样的着色数,首先H0=1,则Hn等于四个字母的(A,B,C,D)的多重集合的n排列数,其中每个字母的重数是无穷,且要求A,C出现的次数是偶数,因此,H0,H1,...Hn,...的指数生成函数是A,B,C,D因子的乘积: 用快速幂解 阅读全文
posted @ 2014-05-15 00:13 whatbeg 阅读(296) 评论(0) 推荐(0)
摘要:题意:给n种房子,每种房子有一个值val和个数cnt,现在要把这些房子分成两部分,争取两部分总值相等,如果不能相等,让A>B,且A-B最小。 解法:先跑一次生成函数,c[n]表示组成总值为n的方法种数,然后从Total/2~0枚举B的总值,如果c[i]不为0,说明可以达到 i 这个状态,说明这就是B 阅读全文
posted @ 2014-05-14 21:47 whatbeg 阅读(227) 评论(0) 推荐(0)
摘要:这题跟上两题也差不多。 把150以内的素数找出来,把素数的值看做硬币的面值,每个硬币的个数即ceil(150/prime[i]),因为再多也没用,最多组成n=150就行了,所以又回到了找硬币问题。用生成函数解之。 代码: #include <iostream> #include <cstdio> # 阅读全文
posted @ 2014-05-14 20:42 whatbeg 阅读(206) 评论(0) 推荐(0)
摘要:跟上题是一个思路:http://www.cnblogs.com/whatbeg/p/3728545.html 只不过是上一题的扩展。 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #incl 阅读全文
posted @ 2014-05-14 20:09 whatbeg 阅读(225) 评论(0) 推荐(0)
摘要:A.解救小QBFS。每次到达一个状态时看是否是在传送阵的一点上,是则传送到另一点即可。代码:#include #include #include #include #include #include using namespace std;#define NA 100007char mp[52][5... 阅读全文
posted @ 2014-05-14 19:52 whatbeg 阅读(541) 评论(0) 推荐(0)
摘要:B.Cuckoo for Hashing模拟题。代码:#include #include #include #include #include #include #include using namespace std;#define N 50007int a[1004],b[1004];int m... 阅读全文
posted @ 2014-05-14 19:50 whatbeg 阅读(237) 评论(0) 推荐(0)
摘要:生成函数题。 题意:有币值1,2,5的硬币若干,问你最小的不能组成的币值为多少。 解法:写出生成函数: 然后求每项的系数即可。 因为三种硬币最多1000枚,1*1000+2*1000+5*1000=8000,那么多项式乘积的最高次数为8000 用c保存累计相乘各项的系数,tc保存c和当前项相乘的系数 阅读全文
posted @ 2014-05-14 19:45 whatbeg 阅读(267) 评论(0) 推荐(0)
摘要:一直想用诸如node k = node(args1,args2...argsN)的方式来初始化一个结构体,可以简化很大一部分代码,开始不知道怎么写,后来问人家,总结出一套代码如下:struct Point{ int x,y; Point(int _x_,int _y_) { ... 阅读全文
posted @ 2014-05-07 18:51 whatbeg 阅读(1384) 评论(0) 推荐(0)
摘要:这题明明是一个简单的类似约瑟夫环的问题,但是由于细节问题迟迟不能得到正确结果,结果比赛完几分钟才改对。。耻辱。代码:#include #include #include #include #include #define ll long longusing namespace std;#define... 阅读全文
posted @ 2014-05-05 21:59 whatbeg 阅读(320) 评论(2) 推荐(0)
摘要:A.Planting Trees排序+模拟常识问题,将耗时排一个序,时间长的先种,每次判断更新最后一天的时间。代码:#include #include #include #include #include #define Mod 1000000007#define INT 2147483647#de... 阅读全文
posted @ 2014-05-04 22:48 whatbeg 阅读(436) 评论(2) 推荐(1)
摘要:A.Islands这种联通块的问题一看就知道是并查集的思想。做法:从高水位到低水位依序进行操作,这样每次都有新的块浮出水面,可以在前面的基础上进行合并集合的操作。给每个位置分配一个数字,方便合并集合。同时将这些数字也排一个序,降低枚举的复杂度。合并集合时向四周查询浮出水面但是没有合并到同一集合的点进... 阅读全文
posted @ 2014-05-02 19:35 whatbeg 阅读(498) 评论(0) 推荐(0)