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) ...
随机推荐
- pv、uv、ip、tps、qps 等术语简单释义
跟网站打交道,经常可以听到数据分析之类的专有名词,如pv多少.ip多少.tps多少之类的问题.下面就这些常见的数据给出英文全称及其释义. PV 即 page view,页面浏览量,用户每一次对网站中的 ...
- 20170624xlVBA生成通讯录文件
Public Sub QqYunContactTransferCsvFile() '应用程序设置 Application.ScreenUpdating = False Application.Disp ...
- Linux 下载最新kubectl版本的命令:
ubuntu centos下通用 第一步.下载最新版本的命令: curl -LO https://storage.googleapis.com/kubernetes-release/release/$ ...
- 河南省第十一届ACM大学生程序设计竞赛
nyoj-1365-山区修路 内存限制:128MB 时间限制:3000ms 特判: No通过数:4 提交数:4 难度:3 题目描述: SNJ位于HB省西部一片群峰耸立的高大山地,横亘于A江.B水之间, ...
- JavaScript学习总结(十四)——JavaScript编写类的扩展方法
在JavaScript中可以使用类的prototype属性来扩展类的属性和方法,在实际开发当中,当JavaScript内置的那些类所提供的动态 ...
- 从零开始学习Vue(二)
思维方式的变化 WebForm时代, Aspx.cs 取得数据,绑定到前台的Repeater之类的控件.重新渲染整个HTML页面.就是整个页面不断的刷新;后来微软打了个补丁,推出了AJAX控件,比如U ...
- ReentrantReadWriteLock——读读共享(一)
多个线程可以同时读,读读是异步的.非互斥的 1.Service.java(封装的方法,供线程A和B访问) package ReentrantReadWriteLock; import java.uti ...
- SimpleXML php 解析xml 的方法
SimpleXML是PHP5后提供的一套简单易用的xml工具集,可以把xml转换成方便处理的对象,也可以组织生成xml数据.不过它不适用于包含namespace的xml,而且要保证xml格式完整(we ...
- 一道sql 关于pivot的面试题
分析:其实它是对时间月份行转列的 表结构设计: 结果: select Name,moth,ISNULL([01],0) as Value1,ISNULL([02],0) as Value2,ISNUL ...
- 【数据库】MFC ODBC(一)
一.动态创建ODBC数据源 ODBC API提供了动态创建数据源的函数SQLConfigDataSource.该函数的原型如下: BOOL SQLConfigDataSource ( HWND hwn ...