HDU 4669 Mutiples on a circle 数位DP
题目链接:
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的更多相关文章
- HDU 4669 Mutiples on a circle(环状DP)
题目链接 这是最早看懂题意的一题,状态转移,挺好想..但是比赛时候,就是没有想到怎么去重,而且当时有些情况,也没注意到. 先预处理的dp[0]的情况,就是以p[0]为结尾的情况.之后D就行了,例如样例 ...
- HDU 4669 Mutiples on a circle (DP , 统计)
转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove 题意:给出一个环,每个点是一个数字,取一个子串,使 ...
- 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 ...
- HDU 4665 Mutiples on a circle (圆环DP)
题意 N个数的圆环上有多少种方案可以使得选出来的一段数是K的倍数(N<=50000, K<=200, a[i]<=1000). 思路 多校第七场1004.圆上的DP--大脑太简单处理 ...
- HDU 4669 Mutiples on a circle 不知道该归为哪一类。
题意:给你N个珠宝和一个K,每个珠宝上面都有数字,这个珠宝做成项链,把珠宝上的数字拼起来如果可以整除掉K,那么久说这个数字为wonderful value,问你有多少种方案可以组成WONDERFUL ...
- HDU 4669 Mutiples on a circle 动态规划
参考了官方题解给的方法: 对于处理循环,官方给了一种很巧妙的方法: #include <cstdio> #include <cstring> #include <cstd ...
- 【HDU 3709】 Balanced Number (数位DP)
Balanced Number Problem Description A balanced number is a non-negative integer that can be balanced ...
- HDU 5642 King's Order【数位dp】
题目链接: http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=677&pid=1003 题意: 求长度为n的序列 ...
- HDU 2089:不要62(数位DP)
http://acm.hdu.edu.cn/showproblem.php?pid=2089 不要62 Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer) ...
随机推荐
- 监控视频采集与Web直播开发全流程分析
内容概要: 摄像头 => FFmpeg => Nginx服务器 => 浏览器 从摄像头拉取rtsp流 转码成rtmp流向推流服务器写入 利用html5播放 1.开发流程 1.1 通过 ...
- angular5 表单元素 checkbox radio 组讲解
一.checkedbox 1.ngModel绑定方式 <input [(ngModel)]="item.checked" value="item.checked&q ...
- jsp forward跟redirect区别
forward 相当于php的 require/include 属于服务器包含/跳转 request.getRequestDispatcher("result.jsp").forw ...
- English trip -- Review Unit6 Time 时间
It's at seven o'clock 整点 7点整 It's at half past seven or It's seven-thirty7点30 It's at seven fi ...
- 使用Jenkins实现maven项目一键部署
下面的博客请详细的,值得一看:jenkins+maven+svn实现简单的一键发布 http://blog.csdn.net/pein_zero/article/details/52597615#co ...
- 12月13日 什么是help_method,session的简单理解, find_by等finder method
helper_method Declare a controller method as a helper. For example, helper_method :link_to def link_ ...
- 『Nltk』常用方法
引言 在nltk的介绍文章中,前面几篇主要介绍了nltk自带的数据(书籍和语料),感觉系统学习意义不大,用到哪里看到那里就行(笑),所以这里会从一些常用功能开始,适当略过对于数据本体的介绍. 文本处理 ...
- bzoj4025: 二分图 lct
题意:带增删边的查询二分图 题解:因为二分图肯定带奇环,lct维护,每次要加入一条边之前判断会不会构成环,如果会就把最先会删除的边删掉,然后如果是奇环就打个标记,然后把奇环数++,删除的时候,把标记删 ...
- zzuli 1484 继续双线
1484: 探 寻 宝 藏 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 94 Solved: 52 SubmitStatusWeb Board De ...
- POJ-2415 Hike on a Graph (BFS)
Description "Hike on a Graph" is a game that is played on a board on which an undirected g ...