DP
文章平均质量分 86
cstirling
这个作者很懒,什么都没留下…
展开
-
HDU 4352 XHXJ's LIS【数位DP】
题目:点击打开链接题意:求出给定区间内有多少数的最长严格单调子序列长度等于k分析:因为这是严格递增的,所以长度不会大于9,考虑用二进制状压保存当前情况下的LIS,令dp[pos][num][K],num表示当前情况下按位保存0~9的出现情况(num3,则原来值125的num=0000100110要改为0000001110而不是0000101110。若不存在非末尾的某个数位大于等于最末尾的数原创 2016-11-05 15:42:32 · 232 阅读 · 0 评论 -
浙江理工大学zstu2016新生赛题解
A:Save the Princess题目:点击打开链接题意:n个人横向排好队,其中左数第k个是公主,LYF和BH分别可以杀掉队列最左边的或者最右边的人,直到某个人拯救公主,两个人都会选择最佳杀人方案,LYF先杀,问谁能拯救公主。分析:当公主在队列两端时,LYF先行动,所以LYF是赢家,其他情况时,当某个人正好杀掉与公主相邻的人时,另一个人肯定是赢家,所以不能先杀公主与公主相邻的人,因原创 2016-11-21 17:37:05 · 5506 阅读 · 8 评论 -
HDU 3336 Count the string 【KMP】【dp】
题目:点击打开链接题意:给定一个字符串,求出字符串中对应各个前缀,在字符串中出现的次数和。分析:显然用kmp,得出next数组后观察容易得到,每一个字符的next为要跳转的位置,则当每次跳转后都要给先前会跳转的字符次数加一,故可以用dp的思想,根据当前的次数和,下一个(即序号前一个)的次数等于当前位置的次数加一,将所有的次数相加就可以得到答案了。原创 2016-10-14 01:32:44 · 194 阅读 · 0 评论 -
URAL 1036 Lucky Tickets 【dp】【高精度】
题目:点击打开链接题意:每个数都有2*n个数位,数位之和为s,前n部分数位之和等于后n部分数位之和,求有多少个这样的数(包含前缀零)分析:当s为奇数时直接输出零,当n为偶数时,把s除以二先算出一半的个数,另一半的个数也相同,因此答案就是个数的平方。考虑数位前后的关系,可以设dp[pos][num],pos是所在的数位,num是之前数位的和,转移方程为dp[pos][num]=∑dp[pos原创 2016-11-15 21:45:38 · 252 阅读 · 0 评论 -
CodeForces 734E Anton and Tree 【连通缩点】
题目:点击打开链接题意:给出n个点,n-1条边构成一棵生成树,每个点都有黑白两种颜色,每次改变颜色都能使同颜色的相邻点改变颜色,求最小改变颜色的次数分析:因为每次改变颜色都能使同颜色的相邻点改变颜色,所以相邻且颜色相同的点可以缩成一点,重新建图,构成黑白相间的点的树,设树的直径(任意两点的最远距离)为d,因为每次改变颜色都会使它与相邻的点的颜色相同,所以取树的直径上的点操作,共有d+1个点原创 2016-11-18 16:16:41 · 764 阅读 · 0 评论 -
URAL 1114 Boxes 【dp】
题目:点击打开链接题意:有n个盒子,a个红球,b个蓝球,球可以任意放入或者不放入盒子,求放置情况的个数分析:不放球的时候是一种情况,每放一个球,放置情况的个数就等于放这个球之前的情况的个数加上原有情况的个数,因此可以用dp做,dp[i][j][k]表示第i个盒子时,用了j个红球和k个蓝球,状态转移方程是dp[i][j][k]+=∑dp[i-1][jj][kk](0#pragma com原创 2016-11-15 00:11:10 · 310 阅读 · 0 评论 -
SPOJ BALNUM Balanced Numbers 【数位DP】
题目:点击打开链接题意:给定一个区间,求出满足以下条件的所有数的个数:数位为奇数的出现偶数次,数位为偶数的出现奇数次。思路:显然用数位DP做,考虑到要保存已经出现的0~9的次数,可以考虑用三进制压缩状态,这个三进制数有十位,从左向右一次表示0~9的出现情况,数位为0表示还未出现,数位为1表示已出现奇数次,数位为2表示已出现偶数次,注意排除掉前导零的情况。本题区间范围有1e19,本题应用un原创 2016-10-29 19:36:50 · 279 阅读 · 0 评论 -
HDU 4507 吉哥系列故事——恨7不成妻 【数位DP】
题目:点击打开链接题意:中文题分析:由于题目要求的是区间内的满足条件的数的平方之和,所以不能用传统的只记录个数来做了。构造结构体记录数的个数,总和以及平方和。dp[pos][sta][smod][mod],sta表示数位是否存在7,smod表示当前的数对7取模的值,mod表示当前的数的每一个数位之和对7取模的值,易得出数的个数。然后可以通过数的个数,算出数的总和。令pre=(先前数位的值)原创 2016-11-05 11:21:50 · 332 阅读 · 0 评论 -
HDU 4734 F(x) 【数位DP】
题目:点击打开链接题意:定义长度为n的数x的各个数位为An,A(n-1)...A2,A1,F(x)=An*2^n+A(n-1)*2^(n-1)+...+A1*1,求出给定区间[0,b]内满足条件F(x)分析:因为a的值是32位的,所以F(x)最大不超过1e4,令dp[pos][sum],sum的初值为F(a),每次进位时减去(当前位的值*当前位的基数),到末尾时判断sum是否大于等于0,若原创 2016-11-05 13:18:32 · 210 阅读 · 0 评论 -
数位DP模板
int dig[20];ll dp[20][10];ll Dfs(int pos,int pre,int lim,int first){ if(pos==-1) return 1; if(!lim&&!first&&dp[pos][pre]!=-1) return dp[pos][pre]; int upper=lim?dig[pos]:9; ll res=0原创 2017-01-02 18:40:40 · 300 阅读 · 0 评论