Codeforces 96E(数位dp)
来源:互联网 发布:pdf 安卓 知乎 编辑:程序博客网 时间:2024/06/01 09:44
题意:找出l,r之间的符合至少有幸运数字相差不超过k的数的个数。
思路:明显的数位dp.思路很简单。但是一直WA在第16个测试样例,因为pre刚开始设置为k + len,想着这样能保证第一个与他相减能使得不低于k,然而pre作为dp数组里的记忆话的元素,并不能频繁地改变,长记性了。
#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int,int> P;#define fi first#define se second#define INF 0x3f3f3f3f#define clr(x,y) memset(x,y,sizeof x)const int maxn = 1000 + 10;const int Mod = 1e9 + 7;const int N = 2;/* _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ .' \\| |// `. / \\||| : |||// \ / _||||| -:- |||||- \ | | \\\ - /// | | | \_| ''\---/'' | | \ .-\__ `-` ___/-. / ___`. .' /--.--\ `. . __ ."" '< `.___\_<|>_/___.' >'"". | | : `- \`.;`\ _ /`;.`/ - ` : | | \ \ `-. \_ __\ /__ _/ .-` / /======`-.____`-.___\_____/___.-`____.-'====== `=---='^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pass System Test!*/string s1,s2;int bits[maxn];int n,k;ll dp[maxn][1010][2];ll dfs(int pos,bool flags,int pre,bool flag){ if(pos < 0)return flags; if(!flag && dp[pos][pre][flags] != -1)return dp[pos][pre][flags]; int up = flag ? bits[pos] : 9; ll ret = 0; for(int i = 0; i <= up; i ++) { if(i == 4 || i == 7) { ret = (ret + dfs(pos - 1,flags ||(pre != -1 && (abs(pre - pos) <= k) ),pos,flag && i == up)) % Mod; } else ret = (ret + dfs(pos - 1,flags,pre,flag && i == up) ) % Mod; } if(!flag )dp[pos][pre][flags] = ret; return ret;}ll calc(string t){ int len = 0;for(int i = t.size() - 1; i >= 0; i --)bits[len ++] = t[i] - '0'; return dfs(len - 1,false,-1,true);}int main(){ clr(dp,-1);// freopen("out.txt","r",stdin); while( ~ scanf("%d%d",&n,&k)) { for(int i = 1; i <= n; i ++) { cin >> s1 >> s2;int flag = 0;int len = s1.size(),temp = -k - 2; for(int i = 0; i < len; i ++) if(s1[i] == '4' || s1[i] == '7') {if(abs(i - temp) <= k ){flag = 1;break;}else temp = i;}// cout << calc(s1) << " " << calc(s2) << " " << flag << endl; printf("%I64d\n", ((calc(s2) - calc(s1) + flag) % Mod + Mod) % Mod); } } return 0;}
阅读全文
0 0
- Codeforces 96E(数位dp)
- codeforces 215E 数位DP
- CodeForces 215E 数位DP
- codeforces 855E 数位DP
- CodeForces 215E Periodical Numbers 数位DP
- Codeforces Round #265 (Div. 2)E(数位dp)
- Codeforces Beta Round #8 E. Beads(数位DP)
- Codeforces Beta Round #8 E. Beads (数位dp)
- Codeforces 855E Salazar Slytherin's Locket(数位dp)
- 【数位dp?】CodeForces 288E Polo the Penguin and Lucky Numbers
- CodeForces 855E Salazar Slytherin's Locket(数位dp+搜索剪枝)
- 【dp】codeforces 83E
- codeforces-731E-dp
- Codeforces 748E dp
- Codeforces 722E [DP]
- Codeforces 416E DP
- Codeforces 258B 数位DP
- 【数位DP】 【CodeForces 55D】
- 堆和栈的区别
- 需要关注的大神的博客资源
- struts2中运用json的完整实例
- opengles 纹理对象&纹理单元
- 记录一次CXF调用服务端需要的JAR
- Codeforces 96E(数位dp)
- 程序猿(更新*2)
- SDUT 1198 鞍点计算
- PHP与.NET的POST接口对接问题
- caffe基础(7): 命令行解析
- 4.3节 逆波兰计算器——程序理解
- 01背包—HDU2546饭卡
- VS2013/MFC基于对话框编程:自定义消息
- hb 888 重发测试版