hdu 2089 不要62 (数位dp)
来源:互联网 发布:做网络销售公司好做吗 编辑:程序博客网 时间:2024/04/30 02:51
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089
思路:用变量记录吉利数,和最高位为2的吉利数还有不是吉利数的个数。。。
code:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int dp[10][3]; //dp[i][j] ,i表示位数,j表示状态//dp[i][0],表示不存在不吉利数字//dp[i][1],表示不存在不吉利数字,且最高位为2//dp[i][2],表示存在不吉利数字void Init(){ memset(dp,0,sizeof(dp)); int i; dp[0][0]=1; for(i=1;i<=6;i++) { dp[i][0]=dp[i-1][0]*9-dp[i-1][1]; //本来应该乘以10的,但是要4不符合条件,所以就乘以9,还有就是要把第i位为6,i-1位为2的减去 dp[i][1]=dp[i-1][0]; //开头只放2 dp[i][2]=dp[i-1][2]*10+dp[i-1][0]+dp[i-1][1]; }}int solve(int n){ int i,len=0,tem=n,ans,flag,a[10]; while(n) { a[++len]=n%10; n/=10; } a[len+1]=ans=0; flag=0; for(i=len;i>0;i--) { ans+=dp[i-1][2]*a[i]; if(flag) //当到某位时,已经确定为不是吉利数啦 { ans+=dp[i-1][0]*a[i]; } if(!flag&&a[i]>4) { ans+=dp[i-1][0]; } if(!flag&&a[i+1]==6&&a[i]>2) { ans+=dp[i][1]; } if(!flag&&a[i]>6) { ans+=dp[i-1][1]; } if(a[i]==4||(a[i+1]==6&&a[i]==2)) { flag=1; } } return tem-ans; //因为题目要求的是吉利数的个数,所以就用总数减去非吉利数}int main(){ int l,r; Init(); while(scanf("%d%d",&l,&r)==2) { if(l==0&&r==0) break; printf("%d\n",solve(r+1)-solve(l));//因为在solve()函数中没有对n进行判断是否为吉利数,所以要加1. } return 0;}
0 0
- hdu 2089 不要62(数位dp)
- hdu 2089(不要62)数位DP
- HDU-#2089不要62(数位DP)
- hdu 2089 不要62 (数位dp)
- HDU 2089 不要62(数位 dp)
- hdu 2089 不要62(数位DP)
- HDU 2089 不要62(数位DP)
- hdu 2089 不要62(数位dp)
- hdu 2089 不要62(数位dp)
- HDU 2089 不要62(数位DP)
- HDU 2089 不要62(数位dp)
- HDU 2089 不要62(数位DP)
- hdu 2089 不要62(数位dp)
- HDU 2089 不要62 (数位DP)
- hdu 2089 不要62(数位dp)
- hdu 2089 不要62 (数位DP)
- 【HDU 2089】不要62(数位dp)
- HDU-2089 不要62 (数位DP)
- 一群人正说笑呢,忱
- 数据库设计准则(第一、第二、第三范式说明)
- 优秀程序员无他-善假于物也
- HDOJ 题目1849Rabbit and Grass(nim博弈)
- How to run cpp-tests on Mac OSX
- hdu 2089 不要62 (数位dp)
- SYSTEM权限引发的系列问题
- c#使用DotNetZip封装类操作zip文件(创建/读取/更新)实例
- 焉的样子,王浩波看出来来,站起逼
- hdu 3038 How Many Answers Are Wrong 带权并查集
- Python中的正则表达式
- linux新建用户后shell无法自动补全命令,Backspace无法删除字符,无法翻看输入纪录
- 由卖票程序来理解线程
- Tomcat 拒绝服务总结