数位dp
zyz_3_14159
这个作者很懒,什么都没留下…
展开
-
HDU-4352-数位dp,LIS
题目大意:求给定区间呢的数满足最长子序列长度为k;题目解析:LIS,dp第二维表示当前的序列,第三维表示目标长度为k,dfs的时候更新序列的时候要像LIS一样找到>=i的第一位并且去掉然后加上第i位;AC代码:#include#include#include#include#includeusing namespace std;typedef long long ll;l原创 2017-05-10 19:41:15 · 236 阅读 · 0 评论 -
LightOJ-1205-数位dp
题目大意:给定区间问区间内有多少数是回文数;题目解析:因为给定长度,其实就已经知道看了他的对称中心,所以从前往后dfs,判断前i位的时候,要判断后面是否可以取到,如果不可以去到,那么后面那位的前一位就必须小于limit,所以dfs要多一个变量ok;AC代码:#include #include #include #include #include原创 2017-05-09 17:14:32 · 344 阅读 · 0 评论 -
LightOJ-1140-数位dp
题目大意:给定区间问区间内所有数的10进制0的个数的总和是多少;题目解析:dp的第二维表示当前已经有多少个0,注意前导零和只有1个0要输出1;AC代码:#include #include #include #include #include using namespace std; typedef long long ll; ll dp[35][300];原创 2017-05-08 23:00:09 · 330 阅读 · 0 评论 -
UESTC-250-数位dp
题目大意:求一个区间内有多少个数中相邻数位之差大于等于2;题目解析::dp的第二维保存上一个数是多少,注意要处理前导零;AC代码:#include#include#include#include#includeusing namespace std;typedef long long ll;ll dp[20][12];int num[20];int ab(int x,原创 2017-05-08 19:50:26 · 310 阅读 · 0 评论 -
HDU-3652-数位dp
题目大意:求区间[0,n]有几个数中间的位数有13并且这个数能够被13整除;题目解析:跟上题一样。只不过因为要整除13所以dp多了一维表示当前位数模13的余数;AC代码:#include#include#include#include#includeusing namespace std;int dp[12][3][14];int n,num[12];int dfs(i原创 2017-05-08 16:49:33 · 258 阅读 · 0 评论 -
HDU-3555-数位dp
题目大意:问区间[0,n]中有多少个数中数位包括49;题目解析:定义dp[i][j]表示有多少个符合条件,i表示第几位,j=0的时候前面的位没有49并且上一位不是4,j=1的时候前面的位数没有49但是上一位是4,j=2的时候表示前面的位数已经包括49了;AC代码:#include#include#include#include#includeusing namespace s原创 2017-05-08 16:44:54 · 221 阅读 · 0 评论 -
HDU-3709-数位dp
题目大意:定义balance数,这个数中间可以有一个中枢,左右边的力矩相等,问区间内有多少个balance数;题目解析:定义dp[i][j][k]表示为第i位,第j位为中枢,当前和为k的个数,dfs的时候如果k已经为负数的话就可以剪枝了;AC代码:#include#include#include#include#includeusing namespace std;type原创 2017-05-04 23:01:01 · 270 阅读 · 0 评论 -
POJ-3252-数位dp
题目大意:前一个区间里二进制表示状态下0的个数不小于1的个数的数的个数;题目解析:定义dp[i][j]表示在i位上0个个数和1的个数的差值的个数,因为会产生负值所以临界值可以设置为32,这道题前导0会有影响,所以需要特别考虑;AC代码:#include#include#include#include#includeusing namespace std;int dp[40原创 2017-05-04 15:12:01 · 209 阅读 · 0 评论 -
HDU-4724-数位dp
题目大意:定义f(x),并给出a和r,问在(0,r)有几个数的f(x)值小于等于f(a);题目解析:定义dp[i][j]表示枚举到第i位,j表示f(a)与当前和的差值;AC代码:#include#include#include#include#includeusing namespace std;int dp[12][10010],n,m,num[12],all;in原创 2017-05-04 14:20:32 · 221 阅读 · 0 评论 -
HDU-2089-数位dp
题目大意:不要62和4的数字在区间(n,m)有几个;题目解析:数位dp模板题,dfs的时候判断前一位是否为6;AC代码:#include#include#include#include#includeusing namespace std;int dp[12][2],n,m,num[12];int dfs(int pos,int sta,bool limit){原创 2017-05-04 13:48:25 · 218 阅读 · 0 评论 -
HDU-4507-数位dp
题目大意 :给定区间,问满足条件所有数的平方和;题目解析:因为要求平方和,所以要用结构体保存个数,和,平方和;(附上大佬的解析)需要维护三个值(推荐使用结构体), 假定dfs推出返回的结构体是next,当前结果的结构体是ans①符合条件数的个数 cnt②符合条件数的和 sum③符合添加数的平方和 sqsum其中①是基础数位DP。②next.sum原创 2017-05-11 00:13:39 · 329 阅读 · 0 评论 -
HDU-3886-数位dp
题目大意:为一个区间内有多少数满足给定函数曲线的数的个数;题目解析:首先因为数据很大,需要用字符串保存,并且要处理掉前导零,否则会对答案有影响,dp第二维表示前一个数是多少,dp的第三维表示当前表示的opt;AC代码:#include#include#include#include#includeusing namespace std;typedef long long l原创 2017-05-09 23:45:36 · 230 阅读 · 0 评论