题目意思:

给定一个表达式,运算符没有优先级,求不同顺序计算,所有可能的得到的结果之和。

由于运算符没有优先级,所以有多种顺序去计算,设d[i][j]表示[i,j]区间表达式通过不同顺序计算,所以可能得到的结果之和,

枚举最后一次运算符是第t个,有可能是加减乘三种,所以需要不同处理。

最后由于s[i][t],s[t+1][j],内部运算的绝对顺序确定,但是s[i][j]整体的相对顺序还没确定,所以乘上C[t-i][j-i-1].

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define maxn 150
#define LL long long
#define MOD 1000000007
using namespace std;
LL s[maxn][maxn];
LL C[maxn][maxn];
LL fac[maxn];
int n;
int a[maxn];
char op[maxn];
void init()
{
fac[]=;
for(int i=;i<maxn;i++)
{
fac[i]=(fac[i-]*i)%MOD;
}
C[][]=;
for(int j=;j<maxn;j++)
{
C[][j]=;
for(int i=;i<maxn;i++)
{
C[i][j]=( (C[i][j-]+C[i-][j-])) %MOD; //²»Ñ¡£¬C[i][j-1],Ñ¡£¬C[i-1][j-1]
}
}
// printf("%lld\n",C[3][6]);
}
void init1()
{
memset(s,,sizeof(s));
}
void solve()
{
for(int tt=;tt<=n;tt++)
for(int i=;i<=n;i++)
{
int j=i+tt;
if(j>n)
continue;
for(int t=i;t<=j-;t++)
{
if(op[t]=='+')
{
int k1=fac[t-i];
int k2=fac[j-(t+)];
LL temp=;
temp = ( (k2*s[i][t])%MOD+(k1*s[t+][j])%MOD )%MOD;
temp = (temp *C[t-i][j-i-]) %MOD;
s[i][j]= (s[i][j]+temp)%MOD;
}
else if(op[t]=='-')
{
int k1=fac[t-i];
int k2=fac[j-(t+)];
LL temp=;
temp = ( (k2*s[i][t])%MOD-(k1*s[t+][j])%MOD +MOD)%MOD;
temp = (temp *C[t-i][j-i-]) %MOD;
s[i][j]= (s[i][j]+temp)%MOD;
}
else if(op[t]=='*')
{
LL temp=;
temp =(s[i][t]*s[t+][j]) % MOD;
temp = (temp *C[t-i][j-i-]) %MOD;
s[i][j]= (s[i][j]+temp)%MOD;
}
}
}
/* for(int tt=1;tt<=n;tt++)
{
for(int i=1;i<=n;i++)
{
int j=i+tt;
if(j>n)
continue;
printf("%lld ",(s[i][j]+MOD)%MOD );
}
printf("\n");
}*/
printf("%lld\n",s[][n]);
}
int main()
{
// freopen("test.txt","r",stdin);
init();
while(~scanf("%d",&n))
{
init1();
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
s[i][i]=a[i];
//printf("%d ",a[i]);
}
scanf("%s",&(op[]));
// printf("%s\n",&(op[1]));
solve();
}
return ;
}

hdu5396(区间DP)的更多相关文章

  1. [hdu5396 Expression]区间DP

    题意:给一个表达式,求所有的计算顺序产生的结果总和 思路:比较明显的区间dp,令dp[l][r]为闭区间[l,r]的所有可能的结果和,考虑最后一个符号的位置k,k必须在l,r之间,则l≤k<r, ...

  2. 【BZOJ-4380】Myjnie 区间DP

    4380: [POI2015]Myjnie Time Limit: 40 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 162  Solved: ...

  3. 【POJ-1390】Blocks 区间DP

    Blocks Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5252   Accepted: 2165 Descriptio ...

  4. 区间DP LightOJ 1422 Halloween Costumes

    http://lightoj.com/volume_showproblem.php?problem=1422 做的第一道区间DP的题目,试水. 参考解题报告: http://www.cnblogs.c ...

  5. BZOJ1055: [HAOI2008]玩具取名[区间DP]

    1055: [HAOI2008]玩具取名 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1588  Solved: 925[Submit][Statu ...

  6. poj2955 Brackets (区间dp)

    题目链接:http://poj.org/problem?id=2955 题意:给定字符串 求括号匹配最多时的子串长度. 区间dp,状态转移方程: dp[i][j]=max ( dp[i][j] , 2 ...

  7. HDU5900 QSC and Master(区间DP + 最小费用最大流)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5900 Description Every school has some legends, ...

  8. BZOJ 1260&UVa 4394 区间DP

    题意: 给一段字符串成段染色,问染成目标串最少次数. SOL: 区间DP... DP[i][j]表示从i染到j最小代价 转移:dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k ...

  9. 区间dp总结篇

    前言:这两天没有写什么题目,把前两周做的有些意思的背包题和最长递增.公共子序列写了个总结.反过去写总结,总能让自己有一番收获......就区间dp来说,一开始我完全不明白它是怎么应用的,甚至于看解题报 ...

随机推荐

  1. [POJ2594] Treasure Exploration(最小路径覆盖-传递闭包 + 匈牙利算法)

    传送门 引子: 有一个问题,是对于一个图上的所有点,用不相交的路径把他们覆盖,使得每个点有且仅属于一条路径,且这个路径数量尽量小. 对于这个问题可以把直接有边相连的两点 x —> y,建一个二分 ...

  2. 【BZOJ1008】越狱(排列组合计数,容斥原理)

    题意: 思路: #include<cstdio> #include<cstdlib> #include<iostream> #include<algorith ...

  3. 2018 百度之星 初赛 第六题 HDU6349

    三原色图  Accepts: 281  Submissions: 1261  Time Limit: 1500/1000 MS (Java/Others)  Memory Limit: 262144/ ...

  4. 【Todo】秒杀系统 & 乐观锁 & Nginx反向代理

    http://www.csdn.net/article/2014-11-28/2822858 1. 单点帐号验证,不用读,而是用写入,Redis,看是否加watch 2. 抢宝的最终购买冲突.包装称“ ...

  5. ArcGIS Engine 10.2 如何发布服务

    http://blog.csdn.net/arcgis_all/article/details/17376397 1 ArcGIS Engine 10.2 如何发布服务 ArcGIS Engine的代 ...

  6. 通过grub硬盘安装centos7

    centos7与centos6.x有了很大的不同,从硬盘安装的方法也有了很大的不同,故出此文章我机器环境如下:    有俩系统 Win7 和 RHEL6.4 ,是通过grub(非grub2)引导的,g ...

  7. 负载均衡之基于DNS负载

    基于DNS的负载平衡 OK,在了解了负载平衡系统的大致组成及使用方式之后.我们就来看看各种负载解决方式. 当前业界中所最常使用的负载平衡解决方式主要分为三种:基于DNS的负载平衡,L3/4负载平衡,也 ...

  8. Leetcode Single Number II (面试题推荐)

    还记得<剑指offer>和<编程之美>等书上多次出现的找一个数组中仅仅出现一次的数那个题吗? leetcode也有这道题 链接here  相信大家都知道用异或在O(n)的时间复 ...

  9. 微博试水卖车社交电商怎样令4S“颤抖”?

        微博对社交电商的探索一直在深入,年初.微博上线了"支付"产品.从而使社交产业链实现了闭环,随后,微博又尝试售卖多种商品,不断扩大移动电商的试水范围,近期微博大规模汽车销售收 ...

  10. 2.NetDh框架之简单高效的日志操作类(附源码和示例代码)

    前言 NetDh框架适用于C/S.B/S的服务端框架,可用于项目开发和学习.目前包含以下四个模块 1.数据库操作层封装Dapper,支持多种数据库类型.多库实例,简单强大: 此部分具体说明可参考博客: ...