hdu 6148 Valley Numer (数位dp)
来源:互联网 发布:川农在线网络教育平台 编辑:程序博客网 时间:2024/05/17 02:49
在强调一下记忆化搜索时间复杂度是O(n)
这里面的记忆化搜索时间复杂度是10*N
一共t组测试数据
10*N*t
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int mod=1e9+7;char s[105];int bit[105];ll dp[105][12][5]; int len;ll dfs(int pos,int pre,int st,int lim){ if(pos>=len) { if(st==4)return 0; else return 1; } if(!lim&&dp[pos][pre][st]!=-1)return dp[pos][pre][st]; int num=lim?bit[pos]:9; ll ans=0; for(int i=0;i<=num;i++) { if(st==2) { if(i<=pre) ans=(ans+dfs(pos+1,i,st,lim&&i==num))%mod; else ans=(ans+dfs(pos+1,i,3,lim&&i==num))%mod; } if(st==3) { if(i>=pre) { ans=(ans+dfs(pos+1,i,3,lim&&i==num))%mod; } } if(st==4) { if(i==0)ans=(ans+dfs(pos+1,i,4,lim&&i==num))%mod; else ans=(ans+dfs(pos+1,i,2,lim&&i==num))%mod; } } if(!lim)dp[pos][pre][st]=ans; return ans;}int main(){ //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int t; scanf("%d*c",&t); while(t--) { scanf("%s",s); memset(dp,-1,sizeof(dp)); memset(bit,0,sizeof(bit)); len=strlen(s); for(int i=0;i<len;i++) bit[i]=(s[i]-'0'); printf("%I64d\n",dfs(0,0,4,1)%mod); } return 0;}
阅读全文
0 0
- 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)
- hdu6148-Valley Numer(数位dp)
- HDU 6148 && 2017 百度之星复赛 1005 Valley Numer(数位dp)
- 2017百度之星复赛 hdu 6148 Valley Numer (数位dp)
- 百度之星复赛--Valley Numer----数位dp
- 2017 百度之星 复赛 Valley Numer(数位dp)
- [压位DP]Hdu 6149——Valley Numer II
- hdu 6149 Valley Numer II (状态压缩dp)
- [数位DP]Hdu 6148——Valley Number
- 2017百度之星复赛:1006. Valley Numer(数位DP)
- 【HDU6149】Valley Numer II(状压DP)
- HDU6149[Valley Numer II]--压位DP
- linux下使用yum安装mysql
- CentOS7安装Nginx1.10.1详细图解教程
- When to work as root & When to Work as a System User
- java 同步/异步IO和阻塞/非阻塞IO 关系和概念解析
- 利用GPU实现翻页效果
- hdu 6148 Valley Numer (数位dp)
- 原码、反码、补码、和位非的关系
- Flask的url_for函数
- QT 过滤文件夹下指定文件
- 线程与进程区别原理分析java编程思想
- MyEclipse 快捷键
- 数学上来先打表
- 有道翻译API 海词API
- 草料二维码