【数位DP】HDU6148[Valley Number]题解
来源:互联网 发布:ipo 净利润 数据 编辑:程序博客网 时间:2024/05/21 22:48
题目概述
一个正整数是
求
解题报告
显然是数位DP,但是我刚开始想了一个很有病的定义,样例都没调出来TAT。
定义
先预处理出
示例程序
请读者老爷原谅我这么乱的代码(数位DP代码总是很乱),DP(L,R)表示求
#include<cstdio>#include<cstring>using namespace std;const int maxn=100,MOD=1000000007;int te,n,a[maxn+5],f[maxn+5][10][2],sum[maxn+5];#define Eoln(x) ((x)==10||(x)==13||(x)==EOF)int check(int k,int t,int j){ if (t) if (k>j) return -1; else return 1; if (!t) if (k<j) return 1; else return 0;}void AMOD(int &x,int tem) {x+=tem;if (x>MOD) x-=MOD;}void DP(int L,int R){ for (int i=L;i<=R;i++) for (int k=0;k<=9;k++) for (int t=0;t<=1;t++) if (f[i-1][k][t]) for (int j=0;j<=9;j++) { int x=check(k,t,j);if (x==-1) continue; AMOD(f[i][j][x],f[i-1][k][t]); }}void Make(){ for (int i=1;i<=maxn;i++) { sum[i]=sum[i-1];memset(f,0,sizeof(f)); for (int j=1;j<=9;j++) f[1][j][0]=1;DP(2,i); for (int j=0;j<=9;j++) AMOD(sum[i],f[i][j][0]),AMOD(sum[i],f[i][j][1]); }}int main(){ freopen("program.in","r",stdin); freopen("program.out","w",stdout); for (Make(),scanf("%d",&te);te;te--) { char ch=getchar();while (Eoln(ch)) ch=getchar(); n=0;while (!Eoln(ch)) a[++n]=ch-48,ch=getchar(); int ans=sum[n-1];memset(f,0,sizeof(f)); for (int j=1;j<a[1];j++) f[1][j][0]=1;DP(2,n); for (int j=0;j<=9;j++) AMOD(ans,f[n][j][0]),AMOD(ans,f[n][j][1]); int fl=0; for (int p=1;p<n;p++) { if (p>1) fl=check(a[p-1],fl,a[p]);if (fl==-1) break; memset(f,0,sizeof(f));f[p][a[p]][fl]=1; for (int j=0,x;j<a[p+1];j++) if (~(x=check(a[p],fl,j))) f[p+1][j][x]=1; DP(p+2,n);for (int j=0;j<=9;j++) AMOD(ans,f[n][j][0]),AMOD(ans,f[n][j][1]); } if (~fl&&n>1) fl=check(a[n-1],fl,a[n]);if (~fl) AMOD(ans,1); printf("%d\n",ans); } return 0;}
阅读全文
0 0
- 【数位DP】HDU6148[Valley Number]题解
- 数位DP——HDU6148 Valley Number
- hdu6148-Valley Numer(数位dp)
- hdu6148 数位dp
- [数位DP]Hdu 6148——Valley Number
- HDU6148-Valley Numer
- Hdu 3652 数位DP B-number题解
- 【数位DP】HDU3652[B-number]题解
- hdu 6148 Valley Numer 数位dp
- HDU 6148 Valley Numer [数位dp]
- hdu 6148 Valley Numer(数位DP)
- Hdu 6148 Valley Numer 数位DP
- hdu 6148 Valley Numer (数位dp)
- hdu 6148 Valley Numer (数位dp)
- HDU 6148 Valley Numer (数位dp)
- HDU 3652 B-number 题解(数位DP模板题)
- 【数位DP】HDU3943[K-th Nya Number]题解
- 百度之星复赛--Valley Numer----数位dp
- 决策树
- c++ 写注册表让程序开机自启动
- java使用tomcat&&原生ajax
- golang--net/rpc
- (1).hdfs特性及适用场景
- 【数位DP】HDU6148[Valley Number]题解
- hdu 1216
- 成员模板,模板类做类成员
- 51nod1264 线段相交
- 性能调优——mysql
- GCD正在运行的线程停不掉?呵呵
- Leetcode 10. Regular Expression Matching
- 解决js浮点运算bug
- 史上最简单的 MySQL 教程(三十一)「子查询(上)」