动态规划
Phoenix丶HN
这个作者很懒,什么都没留下…
展开
-
数位DP(离散化+技巧)
题目链接从1到9的最小公倍数是2520,每一个数被自己的非零位整除,则一定为2520的某一个因子整除,因此求和可以直接对2520取模,这样不影响结果,从1到2520,所有的最小公倍数只有48个,因此可以离散化一下,后面就是数位dp的过程了。dp[pos][presum][index[prelcm]]表示到了第几位,到目前为止和为多少,到目前为止的lcm值。#include#include原创 2017-05-22 18:57:03 · 370 阅读 · 0 评论 -
字符串DP cf803E
http://codeforces.com/problemset/problem/803/E #include using namespace std;const int M=1001;char s[1010];int f[1010][2010],g[1010][2010];int n,k;void dp(int i,int t){ for(int j=-k+1+M;j<原创 2017-06-01 10:38:42 · 348 阅读 · 0 评论 -
数位DP HDU4734
#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef unsigned long long ull;const ll INFF=1e1原创 2017-06-01 13:35:32 · 212 阅读 · 0 评论 -
树形DP(HDU4616)
一眼看上去就是树形DP。可是就是不知道为什么必须枚举每一条边,,,,而不能枚举每一个点!!!!#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;原创 2017-06-01 16:44:24 · 176 阅读 · 0 评论 -
2017年第0届浙江工业大学之江学院程序设计竞赛决赛 Problem E: qwb和李主席 (折半枚举!!!!n堆数分成最接近的两堆!!
Problem E: qwb和李主席Time Limit: 4 Sec Memory Limit: 128 MBSubmit: 274 Solved: 24[Submit][Status][Web Board]Descriptionqwb和李主席打算平分一堆宝藏,他们想确保分配公平,可惜他们都太懒了,你能帮助他们嘛?Input输入包含多组测试数据,处原创 2017-06-02 10:41:49 · 505 阅读 · 0 评论 -
HDU5781(概率DP)
题意:钱的范围是0-2000,最多可悲警告k次,问取出所有钱的次数期望。分析:因为这个人足够聪明,所以她一定会每次折半取,所以这样的话最多也就给警告log次,该题也就是11。所以只需要枚举她可能的钱数和警告次数。怎么转移呢?吐过取出k的钱之后没有警告,那么就转移到dp[i-k][j],如果给警告了,那么就说明钱最多为k-1块,转移到dp[k-1][j-1]。这又分别是多少概率呢?能原创 2017-07-28 12:37:59 · 336 阅读 · 0 评论 -
codeforces808E(超大背包的解决问题,中途相遇法)
题意:超大背包问题。但是只有三种重量。分析:从只有三种重量1,2,3入手。2可以由1组成,3可以有1,2组成。所以考虑中途相遇法。分别处理选1,2和3的情况,然后DP答案!#include#include#include#include#include#include#include#include#include#include#include#include#def原创 2017-07-25 09:35:46 · 538 阅读 · 0 评论 -
Bzoj 4922(字符串匹配新高度+DP)
题意:现给定n个括号序列,你需要选择若干序列,将它们按一定的顺序从左往右拼接起来,得到一个合法的括号序列。计算可以得到的合法的括号序列的长度的最大值。题解:首先对于每个括号序列,把左边的左括号和右边的右括号对消,最后能得到一坨这样的东西: ))…))((…(( 就是x个右括号然后y个左括号,记作(x,y)然后考虑假如我们的子集选好了,我们要按照什么顺序拼接才能拼成一个合法的原创 2017-07-22 15:48:26 · 269 阅读 · 0 评论 -
HDU5823(状压DP)
给你一个n个点的图,问每个子集的最小色数题解:每个子图的染色问题,可以看成是找每个子图的独立集问题(两两顶点互不相邻的图叫独立集),可以先枚举每个状态,然后枚举每个顶点,表示以这个顶点为起始的子图,再枚举每个顶点,表示这个顶点和上面那个顶点所构成的图是一个独立集,预处理出所有非法的状态,即他们之间有边。首先预处理出每个点集的子集是否为独立集. 然后令dp[S]表示点集S的导出子图的原创 2017-07-23 17:34:58 · 376 阅读 · 0 评论 -
codeforces811C(DP)
题目大意:现在给你一个长度为N的序列,我们可以将一些子序列设定为一堆,其价值为这堆中每种数字的异或值。总价值为子序列的值的加和。我们要求分成子序列的部分假设包含了数字5,那么整个序列出现的数字5都必须被这个子序列所包含。问最大价值。分析:因为每个区间是不能相交的 ,所以预处理出来每一个区间的价值,然后DP就好了,到第i个位置能有多少价值,无非就是从第j个位置加上i-j区原创 2017-07-25 10:23:51 · 274 阅读 · 0 评论 -
HDU6148
简单的数位DP。只需要判断是否在递减之前出现过递增#include#include#include#include#include#include#include#include#include#include#include#include#define nl n<<1#define nr (n<<1)|1using namespace std;typedef lo原创 2017-08-18 16:54:00 · 429 阅读 · 0 评论 -
带负值的背包问题poj2184
1:选的牛要保证两个属性和都要大于0。2.总和最大!想到什么。01背包,一个数要么不用,要么用,让价值最大。因为会出现负值,并且两个值均大于0 ,那么假设第一种属性已经大于0了--重新设置0点,让100*1000为0点,过了这个点,就说明选的第一个属性和大于0了,反之则没有。那么这时候就只需要管第二种的属性了。把第一种当做消耗来算,第二种属性来算价值(相当于只有花费a,才能得到b。因为原创 2017-08-18 20:57:22 · 2166 阅读 · 0 评论 -
HDU5410(01背包+完全背包)
背包变形,变成了每次都加A[I],但是B[I]只加一次。一开始直接写了多重背包,后来发现b【i】加多了。后想想的确是想麻烦了。完全可以直接先01把两个都背一次。然后再完全背包只背a就ok了、#includeusing namespace std;typedef long long ll;int w[1010],a[1010],b[1010];int dp[2010];int main()原创 2017-08-04 21:50:52 · 262 阅读 · 0 评论 -
HDU5816(状压DP,位运算的一些技巧)
题意:牌堆里有 N张 A类卡,M张 B类卡 A类卡能让你从牌堆里抽两张卡 第 i张 B类卡能让你对对手造成 x_i点伤害 刚开始从牌堆抽 1张牌,并且对手有 P点生命值 问一回合内打倒对手的概率是多少分析:n+m#includeusing namespace std;typedef long long ll;ll dp[1<<21];ll f[25];in原创 2017-07-28 20:40:17 · 557 阅读 · 0 评论 -
hdu5707
Combine StringTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submission(s): 27 Accepted Submission(s): 17Problem DescriptionGiven three strings原创 2016-05-28 23:15:38 · 1510 阅读 · 0 评论 -
L3-001. 凑零钱(dp)
#include#include#include#includeusing namespace std;const int INF=-0x3fffffff;stacks;int dp[10001],pre[10001],a[10001];int main(){ for(int i=0;i<=10001;++i) { dp[i]=INF; }原创 2016-07-07 15:44:26 · 602 阅读 · 0 评论 -
hdu1011(树形dp)
Starship TroopersTime Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 17060 Accepted Submission(s): 4517Problem DescriptionYou, the l原创 2016-07-26 18:59:34 · 480 阅读 · 0 评论 -
基础DP,数列中取k个区间,使和最大
#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef unsigned long long ull;const ll INFF=0x3原创 2017-05-15 11:13:14 · 442 阅读 · 0 评论 -
数位DP之找等凹数字
题目链接#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;long long dp[20][20][10][2][2][2];int num[20];int原创 2017-05-15 16:08:35 · 316 阅读 · 0 评论 -
DP新姿势
题目链接题解´当n大于3600时,一定可以,证明:当(presum[i]-presum[j])%3600 == 0时,成立,根据抽屉原理,当n > 3600时,一定有presum[i] == presum[j](mod 3600)´当n时,dp´f[p][(j+a[i])%mod] |= f[p^1][j];´f[p][j] |= f[p^1][j];新的姿原创 2017-05-14 22:18:09 · 337 阅读 · 0 评论 -
HDU5327(数位DP)
都用的暴力,要是数再大一点呢?1e9的数据呢?所以我练了练手,数位dp一波,嘻嘻嘻(注意签到0的情况哦)#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long l原创 2017-04-29 17:24:25 · 234 阅读 · 0 评论 -
ZOJ2949数学--期望
点击打开链接思路:写出n=3的情况,就可以看出,会用到n=2的情况,所以毋庸置疑(n=1000),绝壁DP啊!#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long l原创 2017-04-04 12:00:38 · 238 阅读 · 0 评论 -
poj1769(线段树+dp)
点击打开链接题意:用最少的线段,把1-n填满!思路:dp【i】【j】表示到第i个线段,最大能覆盖到j所需要的最少的线段!dp[0][1]=0(因为,一个线段都不选,就是到一开始的1,数量自然也是0);dp[0][j]=INF(j>1)(一开始设为最大,慢慢找最小的);dp[i+1][j]=dp[i][j](t!=j)(这条线段没到底,不能选,因为选了就到t的位置了)原创 2017-04-01 21:36:40 · 523 阅读 · 0 评论 -
最长上升子序列
#include#include#define MAX 1000000#define INF 100000000int a[MAX],c[MAX],len,n;int findd(int L,int R,int x){ if(L==R) return L; int mid=(L+R)>>1; if(c[mid]<x) return原创 2017-03-29 15:09:49 · 191 阅读 · 0 评论 -
hdu 5735(dp的神来一笔,中分位,分祖先和儿子)
Born Slippy#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;int op;ll ans;ll w[100010];int f[1原创 2017-03-10 17:54:37 · 408 阅读 · 0 评论 -
hdu5731(状压+容斥)
题意:多米诺骨牌的矩形完全覆盖, 要求统计没有横切割线和竖切割线的方案数题解第一部分就是轮廓线DP的入门裸题预处理出任意矩形大小的方案数 RES[i][j]不过我怀疑这部分不提前打表的过不了第二部分是一个容斥 先对列容斥,用状压的方式枚举出所有列的分割情况 然后计算,当前列分割情况下,行没有分割的方案数 dp[n]然后再原创 2017-03-09 09:34:44 · 325 阅读 · 0 评论 -
hdu 5729 (联通二分图数目 dp+组合数)
Rigid FrameworksTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 381 Accepted Submission(s): 306Problem DescriptionErik Demaine is转载 2017-03-07 20:04:11 · 705 阅读 · 0 评论 -
动态规划!状态压缩
今天搞了一天的状态压缩dp!!!总之一句话,一脸懵逼,满脸无奈!!对于本身dp就很炸的我来说,真的很难受! 不过只要努力了,就会有收获吧,我把他的基本思想搞懂了!也就是把一个小于20的数,总之2^X不会很大,因为要把他们作为状态存储!然后每一个十进制的数的二进制就是一个状态!进行位运算,来不断dp!! 明天还得学,几下几个题,有的来源找不到了。。 hdu 5711原创 2017-03-01 20:07:35 · 282 阅读 · 0 评论 -
hdu6017(DP)
Besides skipping class, it is also important to meet other girls for luras in the new term.As you see, luras sneaked into another girl's QQgroup to meet her indescribable aim.However, luras ca原创 2017-02-26 13:55:01 · 469 阅读 · 0 评论 -
hdu1074(状态压缩,DP,记录路径)
Doing HomeworkTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8317 Accepted Submission(s): 3840Problem DescriptionIgnatius has ju原创 2016-11-02 18:13:39 · 323 阅读 · 0 评论 -
HDU5860(约瑟夫环问题。超级牛B的动态规划思维题,DP嘛,推出递推式谁不会写)
题意:n个人站一排,从第一个人开始,每隔k个人死一个人,问第x次死的是哪个位置上的人。题解:只需要知道一件事,如果这一轮第i个人死不了,下一轮他的位置是i-i/k-1。然后相当于又是一个子问题,就可以递推了。#include#include#include#include#include#include#include#include#include#include#inc原创 2017-07-22 11:32:26 · 780 阅读 · 0 评论