lightoj 1068(数位dp)
来源:互联网 发布:演示动画制作软件 编辑:程序博客网 时间:2024/05/22 02:20
题目链接:
http://acm.hust.edu.cn/vjudge/problem/26785
题目大意:
能被K整数且各位数字之和也能被K整除的数
解题思路:
状态表示:dp[pos][mod][sum],表示pos位之前的mod值以及每一数位的和
很单纯的数位dp。
其余的数位dp套路细节,详见:(本题与下题链接类似)
http://blog.csdn.net/qq_28302731/article/details/52173767
代码如下:
#include <iostream>#include <string.h>#include <stdio.h>using namespace std;int dp[15][1001][100];int a[15];int k;int dfs(int pos,int mod,int sum,int limit){ if(pos<1) return mod==0&&(sum%k==0); if(!limit&&dp[pos][mod][sum] != -1) return dp[pos][mod][sum]; int next = limit? a[pos]:9; int ans = 0; for(int i=0;i<=next;i++) { int modx=(mod*10+i)%k; int sumx = sum+i; ans += dfs(pos-1,modx,sumx,limit&&(i==next)); } if(!limit) dp[pos][mod][sum] = ans; return ans;}int solve(int n){ int len=0; while(n!=0) { a[++len]=n%10; n /= 10; } int ans=dfs(len,0,0,1); return ans;}int main(){ int l,r,x=1; int t; cin>>t; while(t--) { cin>>l>>r>>k; memset(a,0,sizeof(a)); memset(dp,-1,sizeof(dp)); cout<<"Case "<<x<<": "; x++; cout<<solve(r)-solve(l-1)<<endl; } return 0;}
0 0
- lightoj 1068 数位DP
- LightOJ 1068数位dp
- Lightoj 1068 数位dp
- lightoj 1068(数位dp)
- lightoj 1068 Investigation 数位dp
- LightOJ 1068 Investigation (数位dp)
- lightoj 1068 - Investigation (数位DP)
- LightOJ - 1068 Investigation(数位DP)
- LightOJ 1068 - Investigation(数位DP)
- lightoj 1068 - Investigation 数位DP
- lightOJ 1068 - Investigation (数位dp)
- LightOJ 1068 Investigation (数位DP)
- lightoj - 1068 Investigation (数位dp)
- LightOJ 1068 - Investigation (数位dp)
- lightoj 1140 数位DP
- lightoj 1032 数位DP
- lightoj 1205 数位DP
- Lightoj 1021 数位DP
- mac使用
- weblogic怎么删除已经创建的域即domain?
- Android 可横竖滑动的双向表格
- POJ-1094 Sorting It All Out (拓扑排序)
- jstl <c:forEach>标签
- lightoj 1068(数位dp)
- selector背景选择器文字选择器
- Leetcode_342_Power of Four
- JQ实现简单的图书管理(增删)
- window的基本知识与其环境下的软件测试的基本环境部署
- js中的Math.ceil() 、Math.floor() 、Math.round() 的意思
- vim之简单的配置
- 欢迎使用CSDN-markdown编辑器
- Java VS C++ 传值与函数参数传值