HDU4055_Number String
题目告诉你在一个排列中,相邻两个数的大小关系。问你排列可能有多少种情况。
DP。
f[i][j]表示将i个数按照前面i-1个大小关系排列且最后一个数位j的排列数有多少个。
这样对于新加入的一个数i+1,我们直接枚举第i+1个数在所有的i+1个数为第几大即可。
注意加入sum数组,不然时间复杂度就是O(N^3)了。
注意不要每次取模,注意不需要long long。注意时间常数。
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #define maxn 1010
- #define M 1000000007
- using namespace std;
- int f[maxn][maxn],sum1[maxn],sum2[maxn];
- char s[maxn];
- int count(int x)
- {
- if (x<M) return x;
- return x-M;
- }
- int main()
- {
- while (scanf("%s",s+)!=EOF)
- {
- memset(f,,sizeof f);
- memset(sum1,,sizeof sum1);
- memset(sum2,,sizeof sum2);
- f[][]=,sum1[]=,sum2[]=;
- for (int i=; s[i]; i++)
- {
- for (int j=; j<=i+; j++)
- {
- if (s[i]=='?') f[i+][j]=count(sum1[j-]+sum2[j]);
- else if (s[i]=='I') f[i+][j]=sum1[j-];
- else if (s[i]=='D') f[i+][j]=sum2[j];
- }
- sum1[]=f[i+][];
- for (int j=; j<=i+; j++) sum1[j]=count(sum1[j-]+f[i+][j]);
- sum2[i+]=f[i+][i+];
- for (int j=i; j>; j--) sum2[j]=count(sum2[j+]+f[i+][j]);
- }
- int ans=,n=strlen(s+)+;
- for (int i=; i<=n; i++) ans=count(ans+f[n][i]);
- printf("%d\n",ans);
- }
- return ;
- }
HDU4055_Number String的更多相关文章
- 透过WinDBG的视角看String
摘要 : 最近在博客园里面看到有人在讨论 C# String的一些特性. 大部分情况下是从CODING的角度来讨论String. 本人觉得非常好奇, 在运行时态, String是如何与这些特性联系上的 ...
- JavaScript String对象
本编主要介绍String 字符串对象. 目录 1. 介绍:阐述 String 对象的说明以及定义方式. 2. 实例属性:介绍 String 对象的实例属性: length. 3. 实例方法:介绍 St ...
- ElasticSearch 5学习(9)——映射和分析(string类型废弃)
在ElasticSearch中,存入文档的内容类似于传统数据每个字段一样,都会有一个指定的属性,为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成字符串值,Elasticsearc ...
- [C#] string 与 String,大 S 与小 S 之间没有什么不可言说的秘密
string 与 String,大 S 与小 S 之间没有什么不可言说的秘密 目录 小写 string 与大写 String 声明与初始化 string string 的不可变性 正则 string ...
- js报错: Uncaught RangeError: Invalid string length
在ajax请求后得到的json数据,遍历的时候chrome控制台报这个错误:Uncaught RangeError: Invalid string length,在stackoverflow查找答案时 ...
- c# 字符串连接使用“+”和string.format格式化两种方式
参考文章:http://www.liangshunet.com/ca/201303/218815742.htm 字符串之间的连接常用的两种是:“+”连接.string.format格式化连接.Stri ...
- 【手记】注意BinaryWriter写string的小坑——会在string前加上长度前缀length-prefixed
之前以为BinaryWriter写string会严格按构造时指定的编码(不指定则是无BOM的UTF8)写入string的二进制,如下面的代码: //将字符串"a"写入流,再拿到流的 ...
- JavaScript中String对象的方法介绍
1.字符方法 1.1 charAt() 方法,返回字符串中指定位置的字符. var question = "Do you like JavaScript?"; alert(ques ...
- 在多线程编程中lock(string){...}隐藏的机关
常见误用场景:在订单支付环节中,为了防止用户不小心多次点击支付按钮而导致的订单重复支付问题,我们用 lock(订单号) 来保证对该订单的操作同时只允许一个线程执行. 这样的想法很好,至少比 lock( ...
随机推荐
- 20155305 2016-2017-2《Java程序设计》课程总结
20155305 2016-2017-2<Java程序设计>课程总结 (按顺序)每周作业链接汇总 [预备作业1](http://www.cnblogs.com/20155305ql/p/6 ...
- 20155307 2016-2017第二次《Java程序设计》课堂实践项目
一.String类的使用 模拟实现Linux下Sort -t -k 2的功能.参考 Sort的实现. 在java.lang包中有String.split()方法,它可以把字符串分割为好几个小的字符串. ...
- 342. Power of Four(One-line)
342. Power of Four Total Accepted: 707 Total Submissions: 2005 Difficulty: Easy Given an integer ...
- 【LG3723】[AHOI2017/HNOI2017]礼物
[LG3723][AHOI2017/HNOI2017]礼物 题面 洛谷 题解 首先我们将\(c\)看作一个可以为负的整数,那么我们就可以省去讨论在哪个手环加\(c\)的繁琐步骤了 设我们当前已经选好了 ...
- CF 1083 B. The Fair Nut and Strings
B. The Fair Nut and Strings 题目链接 题意: 在给定的字符串a和字符串b中找到最多k个字符串,使得不同的前缀字符串的数量最多. 分析: 建出trie树,给定的两个字符串就 ...
- 4361: isn
4361: isn https://lydsy.com/JudgeOnline/problem.php?id=4361 分析: dp+容斥. 首先计算出每个长度有多少种子序列是非降的.这一步可以$n^ ...
- KVM虚拟化的安装
kvm介绍 一.KVM的历史 Kvm在2007年2月正式合并Linux2.6.20核心中,成为内核源代码的一部分.2008年9月4日,RedHat公司收购了Qumranet,开始在RHEL中用kvm取 ...
- Java中如何创建一个确保唯一的名字,文件名
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客要讲的有,如何创建一个唯一的文件名,创建一个唯一的String字符串 为什么要创建唯一呢?再很多情况下 ...
- bzoj1861 书架
bzoj1861 书架 原题链接 神题... 先吐槽洛谷的样例 10 10 1 3 2 7 5 8 10 4 9 6 Query 3 Top 5 Ask 6 Bottom 3 Ask 3 Top 6 ...
- Intellij IDEA 2017 通过scala工程运行wordcount
首先是安装scala插件,可以通过idea内置的自动安装方式进行,也可以手动下载可用的插件包之后再通过idea导入. scala插件安装完成之后,新建scala项目,右侧使用默认的sbt 点击Next ...