Mountain Number FZU-2109数位dp

Posted lmcc1108

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mountain Number FZU-2109数位dp相关的知识,希望对你有一定的参考价值。

技术图片
 1 #include<cstdio>
 2 int a[36],dp[36][10][2];//dp[i][j][k]第i数位的前一个数是j奇偶性是k的答案 
 3 int dfs(int p,int pre,bool jo,bool lim)
 4 {
 5     if(p<0)
 6         return 1;
 7     if(!lim&&dp[p][pre][jo]!=-1)
 8         return dp[p][pre][jo];
 9     int up=(lim ? a[p] : 9),ans=0;
10     for(int i=0;i<=up;i++)
11     {
12         if(!jo&&i<=pre)
13             ans+=dfs(p-1,i,1,lim&&i==a[p]);
14         else if(jo&&i>=pre)
15             ans+=dfs(p-1,i,0,lim&&i==a[p]);
16     }
17     if(!lim)
18         dp[p][pre][jo]=ans;
19     return ans;
20 }
21 int solve(int x)
22 {
23     int n=0;
24     while(x)
25     {
26         a[n++]=x%10;
27         x/=10;
28     }
29     return dfs(n-1,9,0,1);
30 }
31 int main()
32 {
33     int t,l,r;
34     for(int i=0;i<=32;i++)
35         for(int j=0;j<=9;j++)
36             for(int k=0;k<2;k++)
37                 dp[i][j][k]=-1;
38     scanf("%d",&t);
39     while(t--)
40     {
41         scanf("%d%d",&l,&r);
42         printf("%d\n",solve(r)-solve(l-1)); 
43     }
44     return 0;
45 }
View Code

 

以上是关于Mountain Number FZU-2109数位dp的主要内容,如果未能解决你的问题,请参考以下文章

lintcode585- Maximum Number in Mountain Sequence- medium

[LintCode] 585 Maximum Number in Mountain Sequence

Leetcode 1671. Minimum Number of Removals to Make Mountain Array

Leetcode 1671. Minimum Number of Removals to Make Mountain Array

Mountain Lion /etc/hosts 离线时解析很慢

Leetcode 941. Valid Mountain Array