题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=4669

考察对取模的的理解深不深刻啊,当然还有状态的设计····设d[i][j]表示以第i个数结尾,余数为j的取法数,那么在第i个数后加一个数

那么有递推式int yu =(  j *  log10( a[i+1] ) + a[i+1] )%k,

d[i+1][yu] += d[i][j] .考虑到这是一个环这样多生成了一个余数,这个余数应该减去,还有++d[i+1][a[i+1]%k].

贴代码:

 #include <cstdio>
#include <cmath>
#include <cstring>
#define N1 50005
#define N2 205
int dp[N1][N2];
int a[N1],b[N1],e[N1*];
int solve(int n,int k)
{
e[]=;
for(int i=; i<=n*; ++i)//e[i]存的是10^i%k
e[i] = e[i-]*%k;
for(int i=; i<n; ++i)//初始化dp为0
for(int j=; j<k; ++j)
dp[i][j] =;
for(int i=; i<=n; ++i)
{
scanf("%d",&a[i]);
b[i] = log10(a[i])+;//b[i]存的是每一个数有多少位
}
int s =;
int len=;// 预处理出以第n个数结尾,余数为j取法数
for(int i=n; i > ; --i)
{
s = (a[i]*e[len]+s)%k;
++dp[][s];
len += b[i];
}
int ans= dp[][];
for(int i=; i<n; ++i)
{
for(int j=; j<k; ++j)
dp[i][(j*e[b[i]]+a[i])%k] += dp[i-][j];
s = (s*e[b[i]]+a[i])%k;//这是一个不合法的余数
//如9 6 4 2 8 (9 6 4 2 8)这个余数是964289%k
--dp[i][s];
++dp[i][a[i]%k];//独立的
s = ((s-a[i]*e[len])%k+k)%k;
//计算64289的余数,因为(9*10^len + 64289)%k = s
//那么64289%k = ((s-a[i]*e[len])%k+k)%k;
ans += dp[i][];
}
return ans;
}
int main()
{
// freopen("1004.txt","r",stdin);
int n,k;
while(scanf("%d%d",&n,&k) != EOF)
{
printf("%d\n",solve(n,k));
}
return ;
}

HDU 4669 Mutiples on a circle 数位DP的更多相关文章

  1. HDU 4669 Mutiples on a circle(环状DP)

    题目链接 这是最早看懂题意的一题,状态转移,挺好想..但是比赛时候,就是没有想到怎么去重,而且当时有些情况,也没注意到. 先预处理的dp[0]的情况,就是以p[0]为结尾的情况.之后D就行了,例如样例 ...

  2. HDU 4669 Mutiples on a circle (DP , 统计)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 题意:给出一个环,每个点是一个数字,取一个子串,使 ...

  3. HDU 4669 Mutiples on a circle (2013多校7 1004题)

    Mutiples on a circle Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Oth ...

  4. HDU 4665 Mutiples on a circle (圆环DP)

    题意 N个数的圆环上有多少种方案可以使得选出来的一段数是K的倍数(N<=50000, K<=200, a[i]<=1000). 思路 多校第七场1004.圆上的DP--大脑太简单处理 ...

  5. HDU 4669 Mutiples on a circle 不知道该归为哪一类。

    题意:给你N个珠宝和一个K,每个珠宝上面都有数字,这个珠宝做成项链,把珠宝上的数字拼起来如果可以整除掉K,那么久说这个数字为wonderful value,问你有多少种方案可以组成WONDERFUL ...

  6. HDU 4669 Mutiples on a circle 动态规划

    参考了官方题解给的方法: 对于处理循环,官方给了一种很巧妙的方法: #include <cstdio> #include <cstring> #include <cstd ...

  7. 【HDU 3709】 Balanced Number (数位DP)

    Balanced Number Problem Description A balanced number is a non-negative integer that can be balanced ...

  8. HDU 5642 King's Order【数位dp】

    题目链接: http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=677&pid=1003 题意: 求长度为n的序列 ...

  9. HDU 2089:不要62(数位DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=2089 不要62 Problem Description   杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer) ...

随机推荐

  1. 【Golang】Debug :decoding dwarf section info at offset 0x0: too short

    解决方法 通过下面的方式升级dlv 来解决这个问题: go get -u github.com/derekparker/delve/cmd/dlv 下面是我记录的定位问题的过程 问题描述 博主升级到了 ...

  2. 常用的vi/vim基本命令(持续更新)

    ★删除/复制/粘贴 全部删除:按esc后,然后dG  全部复制:按esc后,然后ggyG  全选高亮显示:按esc后,然后ggvG或者ggVG   按“+p“可将系统全局粘贴板里的内容粘贴进来   y ...

  3. 一套C#语言的日志控制系统

    using System; public delegate void LogHandle(Object log); public class PlayerHandle { public static ...

  4. cmd 常用操作

    2017-08-24 16:05:28 cd : change directory(目录) 功能:显示当前目录 类型:内部命令 格式:CD[盘符:][路径名][子目录名] 说明:CD命令不能改变当前所 ...

  5. response.sendRedirect跳转 jsp:forward跳转

    response.sendRedirect跳转 <% response.sendRedirect("online.jsp"); %> jsp:forward跳转 < ...

  6. 雷林鹏分享:Ruby 命令行选项

    Ruby 命令行选项 Ruby 一般是从命令行运行,方式如下: $ ruby [ options ] [.] [ programfile ] [ arguments ... ] 解释器可以通过下列选项 ...

  7. Python处理HTML转义字符

    抓网页数据经常遇到例如>或者 这种HTML转义符,抓到字符串里很是烦人. 比方说一个从网页中抓到的字符串: html = '<abc>' 用Python可以这样处理: import ...

  8. 部署Spring web项目遇到的问题及解决方案

    非常悲伤的一个提示: 错误源码: Caused by: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExce ...

  9. python-day6---运算符

    #了解部分#字符串+,*#列表:+,*# l1=[1,2,3]# l2=[4,5]## print(l1+l2)# print(l1*3) #比较运算符# num1=3# num2=1 # print ...

  10. python-day8-赋值

    # x=10 #链式赋值# a=b=c=d=e=f=10# print(a,b,c,d,e,f) #增量赋值 # x=10# y='a'# temp=x# x=y# y=temp# print(x,y ...