HDU 4669 Mutiples on a circle(环状DP)
这是最早看懂题意的一题,状态转移,挺好想。。但是比赛时候,就是没有想到怎么去重,而且当时有些情况,也没注意到。
先预处理的dp[0]的情况,就是以p[0]为结尾的情况。之后D就行了,例如样例此位6,去重只要把642896 去掉就行了,dp[1][642896%m] --;注意这个值的更新。
突然发现。

#include <cstdio>
#include <cstring>
using namespace std;
#define LL __int64
int dp[][];
int p[];
int d[];
int po[];
int fun(int x)
{
int i = ;
while(x)
{
i ++;
x = x/;
}
return i;
}
int main()
{
int n,m,i,j,sum,pre;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i = ;i <= n;i ++)
{
for(j = ;j < m;j ++)
dp[i][j] = ;
}
po[] = ;
for(i = ;i <= *n;i ++)
{
po[i] = (po[i-]*)%m;
}
for(i = ;i < n;i ++)
{
scanf("%d",&p[i]);
d[i] = fun(p[i]);
}
p[n] = p[];
d[n] = d[];
sum = ;
pre = ;
for(i = n;i > ;i --)
{
sum = (p[i]*po[pre] + sum)%m;
pre += d[i];
dp[][sum] ++;
}
for(i = ;i < n;i ++)
{
for(j = ;j < m;j ++)
{
dp[i][(j*po[d[i]]+p[i])%m] += dp[i-][j];
}
sum = (sum*po[d[i]] + p[i])%m;
dp[i][sum] --;
dp[i][p[i]%m] ++;
sum = (sum - po[pre]*p[i])%m;
if(sum < )
sum += m;
}
LL ans = ;
for(i = ;i < n;i ++)
{
ans += dp[i][];
}
printf("%I64d\n",ans);
}
return ;
}
HDU 4669 Mutiples on a circle(环状DP)的更多相关文章
- HDU 4669 Mutiples on a circle 数位DP
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4669 考察对取模的的理解深不深刻啊,当然还有状态的设计····设d[i][j]表示以第i个数结尾,余 ...
- 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-4669 Mutiples on a circle 环形DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4669 题意:给一串数字连乘一个环,求连续的子串中组成的新的数字能被K整除的个数. 首先容易想到用DP来 ...
- [USACO2005][POJ2228]Naptime(对特殊环状DP的处理)
题目:http://poj.org/problem?id=2228 题意:将一天分为N小时,每小时都有一个价值w,有一头牛要睡觉,而它的睡觉是连续的,且第一小时不能算价值,即如果你睡了[a,b],则你 ...
- hdu 5025 Saving Tang Monk 状态压缩dp+广搜
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092939.html 题目链接:hdu 5025 Saving Tang Monk 状态压缩 ...
随机推荐
- 解决android:theme="@android:style/Theme.NoDisplay" 加入这句话后程序不能运行
原因: 原来用的是ActionBarActivity,继承自 ActionBarActivity的类必须指定固定的集中Theme风格,而这些 Theme 风格是需要导入V7中的 appcompat L ...
- [另开新坑] 算导v3 #26 最大流 翻译
26 最大流 就像我们可以对一个路网构建一个有向图求最短路一样,我们也可以将一个有向图看成是一个"流量网络(flow network)",用它来回答关于流的问题. Just as ...
- Jump Game | & ||
Jump Game | Given an array of non-negative integers, you are initially positioned at the first index ...
- 搭建CAS单点登录服务器
最近公司的一个项目需要用到单点登录的功能,之前对单点登录了解得不多.于是网上找了下单点登录的解决方案,发现CAS是个不错的解决方案.于是搭个环境测试了一下.这里记录下测试的详细步骤. 官网:http: ...
- mysql varchar
2013年9月13日 14:58:43 MYSQL的varchar数据类型 先说结论: 如果设置字段长度为30,字符编码为utf8,那么一个汉字算一个字符,一个数字算一个字符,一个字母也算一个字符 版 ...
- libavcodec/dxva2.h:40:5: error: unknown type name 'IDirectXVideoDecoder'
gcc 4.9.2 编译 ffmpeg-git-1aeb88b 是出现如下错误 > FFmpeg fails to make with: > > CC libavcodec/dxva ...
- Java for LeetCode 038 Count and Say
The count-and-say sequence is the sequence of integers beginning as follows: 1, 11, 21, 1211, 111221 ...
- Live Archive 3644 X-Plosives 解题报告
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=1 ...
- 爱改名的小融 2(codevs 3149)
3149 爱改名的小融 2 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description Wikioi上有个人 ...
- php 数组定义、取值和遍历
<?php //常用函数 //生成随机数 //echo rand(1,10); //两个参数来确定随机数的范围 //日期时间函数 //var_dump(time()); //取当前时间的UNIX ...