当前位置: 首页 > news >正文

dede 转wordpress/深圳seo排名优化

dede 转wordpress,深圳seo排名优化,石家庄网站建设流程,开源手机网站题目链接: http://acm.hdu.edu.cn/showproblem.php?pid4055 题目大意: 给一个只含‘I,D,?三种字符的字符串,I表示当前数字大于前面的数字,D表示当前的数字小于前面一位的数字,?表示当前位既可以小于又可以…

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=4055

题目大意:

给一个只含‘I','D','?'三种字符的字符串,I表示当前数字大于前面的数字,D表示当前的数字小于前面一位的数字,?表示当前位既可以小于又可以大于。

问1~n的排列中有多少个满足该字符串。

解题思路:

计数dp.

dp[i][j]表示长度为i字符串,最后一个数为j时,能达到满足给定字符串的1~i+1的排列个数。

转移方程:

当S[i]='I'时,当前如果为j的话,前面的一位肯定要小于j,dp[i][j]+=Mi[j-1] ; //Mi[i]表示前面一位下标小于等于i dp[][1~i]的和

当S[i]='D'时,dp[i][j]+=(la-Mi[j-1]);  //前一位要大于等于j

当S[i]='?'时,dp[i][j]+=la; //la表示前一位所有的状态总和.

注意递推的时候,前i位只和相对大小有关,与绝对大小无关,所以都用1~i表示,当增加一位时,就变成了1~i+1,如果当前为j,前面的小于j的状态不变,大于等于j的状态k所表示的值 现在表示k+1的值,这样就从1~i等价的转化成了1~i+1,这样考虑就不用考虑1~n的放法了,递推到n位时肯定都是1~n了。

代码:

 

#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<cctype>
#include<map>
#include<vector>
#include<set>
#include<queue>
#include<string>
using namespace std;const int INF = 0x3f3f3f3f;
const double eps = 1e-6;
const double PI = acos(-1.0);
typedef __int64 ll;
//#pragma comment(linker, "/STACK:1024000000,1024000000")
/*
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
*/#define M 1000000007
#define Maxn 1100
char sa[Maxn];
int dp[Maxn][Maxn]; //dp[i][j]表示有i个字符,当前数字为j时,所有的总数//注意有i个字符说明前面一共有1~i+1个不同的数字,dp[i-1]共有1~i个数字,//建立递推时,如果当前为j,则前面小于j的不变,大于等于j的全部加一,这样就从1~i变成了1~i+1
int la;
int Mi[Maxn][2]; //Mi[i]表示上一个dp[i-1]下标小于等于j的值的总和int main()
{while(~scanf("%s",sa+1)){int len=strlen(sa+1);for(int i=0;i<=len+10;i++) //初始化{Mi[i][0]=Mi[i][1]=0;for(int j=0;j<=len+10;j++)dp[i][j]=0;}dp[0][1]=1; //没有字符时,有一个数 且这个数为1la=1;Mi[1][0]=1; //下标小于等于1的有一个int pp=0;for(int i=1;i<=len;i++){pp=pp^1; //当前状态int n=i+1;//当前为可能的取值,注意前面的之和相对大小有关ll cur=0;for(int j=1;j<=n;j++) //枚举当前位的数值{if(sa[i]=='I') //如果为增的话,前面的肯定是小于j的dp[i][j]=(dp[i][j]+Mi[j-1][pp^1])%M;else if(sa[i]=='D') //减的话,前面是大于等于j的,加1后就变成了大于j的了dp[i][j]=(dp[i][j]+(la-Mi[j-1][pp^1])%M+M)%M;else //如果无所谓的话,前面所有1-n-1个状态都行dp[i][j]=(dp[i][j]+la)%M; //用一个la记录Mi[j][pp]=(Mi[j-1][pp]+dp[i][j])%M;//求出当前的Micur=(cur+dp[i][j])%M; //求出当前的la}la=cur; //这题卡常数,多了几个循环都不行}ll ans=0;for(int i=1;i<=len+1;i++) //枚举最后的能够占有的值ans=(ans+dp[len][i])%M;printf("%d\n",ans);}return 0;
}


 

 

转载于:https://www.cnblogs.com/suncoolcat/p/3297225.html

http://www.jmfq.cn/news/4769767.html

相关文章:

  • html5标准网站建设/老客外链
  • 专业集团网站建设/初学者做电商怎么入手
  • 做一回最好的网站/百度推广托管公司
  • 设计网站官网狗/市场营销平台
  • 咖啡店网站首页怎么做/网络营销是干什么的
  • 深圳wap网站建设/湖北网站推广
  • 做海报图片去哪个网站找 知乎/南沙seo培训
  • 新乡网站设计公司/手机软文广告300字
  • 网站外地备案/关键词seo
  • 个人想做外贸怎么做/seo顾问合同
  • 怎么修改wordpress模版/seo推广服务
  • 深圳网站建设 独/免费google账号注册入口
  • 网友要求你帮助他在某网站做测试/厦门网站综合优化贵吗
  • 荔湾做网站/seo整站优化外包公司
  • 外包经验会影响后续找工作吗/seo入门培训教程
  • 查询公司的网站备案信息/怎样创建网站平台
  • 拼团购物网站怎么做/苏州网站维护
  • wordpress微信支付后开通会员/哈尔滨百度关键词优化
  • 深圳四站合一网站建设电话/百度seo搜索
  • 网站建设应用技术/广州中小企业seo推广运营
  • 网站建设公司 深圳信科/衡阳seo优化推荐
  • 潮州网站seo/市场调研方案怎么写
  • angularjs做网站案例/武汉网络营销公司排名
  • 做百度移动网站吗/百度电脑端网页版入口
  • 网站关键字设置格式/免费的网站推广软件下载
  • 网站建设详细的步骤有哪些/seo排名优化
  • 网站建设的步骤教程视频/网络游戏推广员
  • 网站阵地建设管理/免费建一级域名网站
  • 免费网站奖励自己的软件/竞价推广和信息流推广
  • 基督网站讲道新年做 新 造人/应用商店下载