[BZOJ 1026][SCOI 2009]windy数(数位DP)
来源:互联网 发布:开通淘宝商城的流程 编辑:程序博客网 时间:2024/06/05 00:28
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1026
很基础的数位DP题,很早之前我就尝试做这题,不过当时我被这题吓死了,现在回过头做这题,感觉简单多了。
做这个题时我想到了POJ一道类似的组合数学的题,同样是按数位统计,有异曲同工之妙。
题目要求[a,b]区间上的windy数个数,我们可以转化成求[1,a]上的windy数个数-[1,b-1]上的windy数个数。题目转化成了求[1,x]上的windy数个数,我们就写个函数cal(x)。另外我们用w[i][j]表示长度为i的数字,最高位为j(注意j可以为0)所组成的windy数个数。很容易推导出公式w[i][j]=Σw[i-1][k],0<=k<=9,|k-j|>=2。这个问题处理完后,就是按位统计的问题了。(1)首先我们统计出长度小于x的windy数个数,(2)然后再统计出长度等于x,最高位数字小于x的最高位数字的windy数个数,(3)再从次高位到个位逐位按照类似步骤(2)的方法统计即可。为了避免前导零的情况,最高位统计时不能将w[i][0]算进去。
网上很多人从低位到高位的方法进行统计,太复杂了,还要讨论,真的不如从高位到低位统计来得方便,囧。
#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <algorithm>#define INF 0x3f3f3f3fusing namespace std;typedef long long int LL;int primes[]={0, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29}; //质数打表LL n,ans,cnt; //cnt=约数个数最大值,ans=约数个数取最大值时的最小的数字void DFS(LL num,LL maxP,int now,int nowcnt) //num=当前乘积得到的数,maxp=下一个质数最大的幂,now=当前状态下使用的质数下标,nowcnt=当前数约数个数{ if(nowcnt>cnt||nowcnt==cnt&&num<ans) { cnt=nowcnt; ans=num; } if(now>10) return; //取的质数个数太多了,已经超出了n的范围,不必继续搜索了 LL nownum=num; for(int i=1;i<=maxP;i++) //枚举下一个质因数的幂 { nownum*=(LL)primes[now]; if(nownum>n) return; DFS(nownum,i,now+1,nowcnt*(i+1)); }}int main(){ scanf("%lld",&n); ans=1,cnt=1; DFS(1,INF,1,1); printf("%lld\n",ans); return 0;}
0 0
- [BZOJ 1026][SCOI 2009]windy数(数位DP)
- 【BZOJ 1026】【SCOI 2009】windy数 【数位DP】
- [省选前题目整理][BZOJ 1026][SCOI 2009]windy数(数位DP)
- [SCOI 2009]BZOJ 1026 windy数
- [bzoj 1026]windy数[数位DP]
- 数位dp BZOJ 1026: [SCOI2009]windy数
- BZOJ 1026 SCOI2009 windy数 数位DP
- bzoj 1026 windy数(数位DP)
- 【BZOJ】1026: [SCOI2009]windy数 数位DP
- bzoj 1026 Windy数 数位DP
- BZOJ 1026 windy数 (数位DP)
- BZOJ 1026 [SCOI2009]windy数 数位DP?
- bzoj 1026 windy数|数位dp
- bzoj 1026: [SCOI2009]windy数 数位dp
- BZOJ 1026 windy数(数位dp)
- BZOJ 1026 [SCOI2009]windy数【数位DP】
- Bzoj 1026 windy数【数位dp】
- BZOJ-1026-windy数(数位DP)
- 禁止其它用户本地登陆计算机
- C++标准库---map&multimap
- 哈希表中查找成功和不成功时的平均查找长度如何计算
- Hadoop计算中的Shuffle过程
- Struts和Spring所须包
- [BZOJ 1026][SCOI 2009]windy数(数位DP)
- ORMLite外键引用
- 采用Filter过滤器设置字符集
- 初探swift语言的学习
- Git系列博客——(1)初识git
- Apache Commons 工具类介绍及简单使用
- centos6.5修改时区
- iOS程序警告:EXC_BAD_ACCESS(code=1
- 10个常用工具类 Android快速开发系列