Expression

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 175    Accepted Submission(s): 95

Problem Description
Teacher Mai has n numbers $a_1,a_2,\dots,a_n$ and $n-1$ operators ("+","-" or "*")$op_1,op_2,\dots,op_{n-1}$ which are arranged in the form $a_1\quad op_1 \quad a_2\quad op_2\quad a_3\dots\quad a_n$

He wants to erase numbers one by one. In i-th round, there are n+1−i numbers remained. He can erase two adjacent numbers and the operator between them, and then put a new number (derived from this one operation) in this position. After n−1 rounds, there is the only one number remained. The result of this sequence of operations is the last number remained.

He wants to know the sum of results of all different sequences of operations. Two sequences of operations are considered different if and only if in one round he chooses different numbers.

For example, a possible sequence of operations for "1+4∗6−8∗3" is 1+4∗6−8∗3→1+4∗(−2)∗3→1+(−8)∗3→(−7)∗3→−21.

Input
There are multiple test cases.

For each test case, the first line contains one number $n(2\leq n \leq 100)$.

The second line contains n integers $a_1,a_2,⋯,a_n\quad(0≤a_i \leq 10^9)$.

The third line contains a string with length n−1 consisting "+","-" and "*", which represents the operator sequence.

Output
For each test case print the answer modulo $10^9+7$.

Sample Input
3
3 2 1
-+
5
1 4 6 8 3
+*-*
 
Sample Output
2
999999689

 
Hint

Two numbers are considered different when they are in different positions.

 
Author
xudyh
 
Source
 
解题:区间动规,尼玛,最坑爹的地方在于区间合并的时候容易把合并也是有时序的忘记乘入了。
 
c[t-j-1][k-j]就是干这个用的 假设左边的顺序固定,右边的顺序固定,合并后,还得保持来自左边的那些操作符的相对操作顺序,右边的也一样,所以是组合数
 
关于阶乘,其实这么多个操作符,有多少种操作顺序?当然是阶乘个
 
至于+-法的合并,可以发现假设A代表里面有3个和的和,B代表里面有2个和的和
 
A(a,b,c) + B(d+e)
 
由于我们要求每种可能
 
那么将产生 
 
$a + d \quad b + d \quad c + d$
$a + e \quad b + e \quad c + e$
 
可以发现其等价于 2A + 3B A里面的元素都加了两次,B里面的元素都加了3次
 
好啦dp吧,没想到要用到$\binom{0}{0}$害我debug好久
 
 #include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = ;
const LL mod = ;
LL dp[maxn][maxn],c[maxn][maxn] = {},f[maxn] = {};
void init() {
for(int i = ; i < maxn; ++i) {
c[i][] = c[i][i] = ;
f[i] = f[i-]*i%mod;
for(int j = ; j < i; ++j)
c[i][j] = (c[i-][j-] + c[i-][j])%mod;
}
}
char op[maxn];
int main() {
init();
int n;
while(~scanf("%d",&n)) {
memset(dp,,sizeof dp);
for(int i = ; i < n; ++i)
scanf("%I64d",&dp[i][i]);
scanf("%s",op);
for(int i = ; i <= n; ++i) {
for(int j = ; j + i <= n; ++j) {
for(int k = j,t = j + i -; k < t; ++k) {
LL tmp;
if(op[k] == '+')
tmp = (f[t-k-]*dp[j][k] + f[k-j]*dp[k+][t])%mod;
else if(op[k] == '-') {
tmp = (f[t-k-]*dp[j][k] - f[k-j]*dp[k+][t])%mod;
tmp = (tmp + mod)%mod;
} else if(op[k] == '*') tmp = dp[j][k]*dp[k+][t]%mod;
tmp = tmp*c[t-j-][k-j]%mod;
dp[j][t] = (dp[j][t] + tmp + mod)%mod;
}
}
}
printf("%I64d\n",dp[][n-]);
}
return ;
}
 

2015 Multi-University Training Contest 9 hdu 5396 Expression的更多相关文章

  1. 2015 Multi-University Training Contest 8 hdu 5390 tree

    tree Time Limit: 8000ms Memory Limit: 262144KB This problem will be judged on HDU. Original ID: 5390 ...

  2. 2015 Multi-University Training Contest 8 hdu 5383 Yu-Gi-Oh!

    Yu-Gi-Oh! Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on HDU. Original ID:  ...

  3. 2015 Multi-University Training Contest 8 hdu 5385 The path

    The path Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on HDU. Original ID: 5 ...

  4. 2015 Multi-University Training Contest 3 hdu 5324 Boring Class

    Boring Class Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  5. 2015 Multi-University Training Contest 3 hdu 5317 RGCDQ

    RGCDQ Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  6. 2015 Multi-University Training Contest 10 hdu 5406 CRB and Apple

    CRB and Apple Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  7. 2015 Multi-University Training Contest 10 hdu 5412 CRB and Queries

    CRB and Queries Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Other ...

  8. 2015 Multi-University Training Contest 6 hdu 5362 Just A String

    Just A String Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  9. 2015 Multi-University Training Contest 6 hdu 5357 Easy Sequence

    Easy Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

随机推荐

  1. C# List数据批量更新

    针对单条数据一般都是update语句直接更新 例如:update UserTable set UserName='小名'   where userid=xxx 但是如果是针对List数据组进行更新的话 ...

  2. ios开发之Swift新手入门

    1.关于swift和调试,swift在ios7.0才支持,ios8.3系统的真机必需要xcode6.3才干调试.安装xcode6.3需要os x 10.10以上 2.应用程序由Main.storybo ...

  3. ubuntu下安装AndroidStudio

    近期将电脑的操作系统换成了ubuntu,对于不习惯win8/win10的人来说ubuntu确实是一个不错的选择,主要的软件都ok了,至于QQ什么的,大家能够去找wine版的,或者直接下载一个叫Cros ...

  4. keyboard键盘demo

    main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and ...

  5. 关于ShapeDrawable应用的一些介绍(上)

    在Android中, 很多时候系统原生的控件的格式并不能满足我们的需求,我们想要更加好看点的样式,像什么圆角矩形啊,颜色渐变啊,阴影效果啊等等的,这个时候就是我们的 ShapeDrawable发挥效果 ...

  6. 虚拟机CentOS设置IP

    虚拟机里Centos7的IP地址查看方法 本地虚拟机安装了CentOS 7,想通过ftp上传文件,发现通过ifconfig,没有inet这个属性 查看ens33网卡的配置:vi /etc/syscon ...

  7. WPF 漏斗控件 等待沙漏效果

    由于WPF中不支持gif图片因此要实现一个漏斗沙漏效果有点小麻烦. 网上有一款开源的控件 理论上完全开源 官网 http://wpfspark.codeplex.com/贴一下效果图 大家感觉需要就在 ...

  8. Solr.NET快速入门(七)【覆盖默认映射器,NHibernate集成】

    覆盖默认映射器 默认情况下,SolrNet使用属性映射Solr字段. 但是,您可能需要使用另一个映射程序. 替换默认映射器取决于您如何设置库: 内置容器 如果使用默认的内置容器,可以在调用Startu ...

  9. 【正则表达式】从json数组中抽取id列表

    有如下数组,要从中取出id: "[\"3812662409\",\"3812633637\",\"3812627686\",\&q ...

  10. [lua] future模式*协程

    以下是lua实现的future模式.基于cocos客户端 local function param_pack( params, callback ) table.insert(params, call ...