题目链接:https://vjudge.net/problem/POJ-1850

这题我用的是数位dp,刚刚看了一下别人用排列组合,我脑子不行,想不出来。

在这题里面我把a看成1,其他的依次递增,如果这一位是0则说明没有字符,每次搜索到第pos位,那么这一位的数字有两种情况,一种是这一位的i比前一位pre大,则从i继续搜索,另一种是前一位是0,没有字符,那么这一位就可以取任何值(但是要注意避免全部为0的情况),然后用数位dp模板套了一下。

代码:

#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<cmath>
#include<vector>
using namespace std;
#define eps 1e-8
#define ll long long
#define INF 1e9
ll dp[][];
int digit[];
char str[];
ll dfs(int pos,int pre,int limit)
{
if(pos==)
return ;
if(!limit&&dp[pos][pre]!=-)
return dp[pos][pre];
int num=limit?digit[pos]:;
ll sum=;
for(int i=;i<=num;i++)
{
if(i>pre||pre==&&pos!=)//这里pre==0是那种前面没字符的情况,加了pos!=1是防止全部都是0的情况
{
sum+=dfs(pos-,i,i==num&&limit);
}
}
if(!limit&&dp[pos][pre]==-)
dp[pos][pre]=sum;
return sum; }
ll cal()
{
memset(dp,-,sizeof(dp));
int len=strlen(str);
int cnt=;
for(int i=len-;i>=;i--)//把字符转化为数字
{
digit[++cnt]=str[i]-'a'+;
}
int flag=;
for(int i=len-;i>=;i--)//判断是否升序
{
if(digit[i]<=digit[i+])
{
flag=;
break;
}
}
if(flag)
return ;
return dfs(len,,);
}
int main()
{
cin>>str;
cout<<cal()<<endl;
return ;
}

数位dp poj1850的更多相关文章

  1. 【poj1850】 Code 数位dp+记忆化搜索

    题目大意:给你一个字符串,问你这个字符串的rank,如果这个字符串不合法,请直接输出0.(一个合法的字符串是对于∀i,有c[i]<c[i+1]) 字符串s的rank的计算方式:以字符串长度作为第 ...

  2. 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP

    [BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...

  3. bzoj1026数位dp

    基础的数位dp 但是ce了一发,(abs难道不是cmath里的吗?改成bits/stdc++.h就过了) #include <bits/stdc++.h> using namespace ...

  4. uva12063数位dp

    辣鸡军训毁我青春!!! 因为在军训,导致很长时间都只能看书yy题目,而不能溜到机房鏼题 于是在猫大的帮助下我发现这道习题是数位dp 然后想起之前讲dp的时候一直在补作业所以没怎么写,然后就试了试 果然 ...

  5. HDU2089 不要62[数位DP]

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  6. 数位DP GYM 100827 E Hill Number

    题目链接 题意:判断小于n的数字中,数位从高到低成上升再下降的趋势的数字的个数 分析:简单的数位DP,保存前一位的数字,注意临界点的处理,都是套路. #include <bits/stdc++. ...

  7. 数位dp总结

    由简单到稍微难点. 从网上搜了10到数位dp的题目,有几道还是很难想到的,前几道基本都是模板题,供入门用. 点开即可看题解. hdu3555 Bomb hdu3652 B-number hdu2089 ...

  8. 数位DP入门

    HDU 2089 不要62 DESC: 问l, r范围内的没有4和相邻62的数有多少个. #include <stdio.h> #include <string.h> #inc ...

  9. 数位DP之奥义

    恩是的没错数位DP的奥义就是一个简练的dfs模板 int dfs(int position, int condition, bool boundary) { ) return (condition ? ...

随机推荐

  1. ip黑白名单防火墙frdev的原理与实现

    汤之盘铭曰 苟日新 日日新 又日新 康诰曰 作新民 诗曰 周虽旧邦 其命维新 是故 君子无所不用其极 ——礼记·大学 在上一篇文章<DDoS攻防战 (二) :CC攻击工具实现与防御理论>中 ...

  2. oracle删除表数据的两种的方式

    转自:https://blog.csdn.net/qq_37840993/article/details/82490787 平时写sql中我们都会用到删除语句,而平时删除表数据的时候我们经常会用到两种 ...

  3. 20165304 实验二 Java面向对象程序设计

    一.面向对象程序设计1--单元测试和TDD 实验要求 1.参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST 完成单元测试的学习 2 ...

  4. vue格式化显示json数据

    已经是json格式数据的,直接用标签 <pre></pre>展示. 参考:https://www.jianshu.com/p/d98f58267e40

  5. gevent mysql

    使用gevent实现mysql并发时,每个greenlet应该独享一个mysql连接,否则,不同的greenlet之间会相互影响. ultramysql doesn't allow you to ma ...

  6. list<T>中的按特定顺序排序

    前段时间有个任务,就是把参数要按特定顺序排序,就是要是在一张大的参数表中,只选取,2,5,12,9,13,10 这几个参数,并按上述顺序进行排序. 假设这个参数在一个类中.例如: 上述参数序列就存在P ...

  7. Packets 1037A(二进制数)

    分析:看这个数有多少位二进制数 #include<cstdio> int main() { int n; while(~scanf("%d",&n)) { ; ...

  8. Java设置运行时环境参数

    一.代码中,如下: System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", " ...

  9. TRANSFORM YOUR HABITS

    TRANSFORM YOUR HABITS3rd EditionNote from James Clear:I wrote Transform Your Habits to create a free ...

  10. 第七次Scrum冲刺

    第七次Scrum冲刺 1.今日完成的任务 队员 今日完成任务 刘佳 前端与后端对接 李佳 后端与数据库对接 周世元 数据库与后端对接 杨小妮 博客编写 许燕婷 管理团队当日及次日任务 陈水莲 综合测试 ...