hdu5396(区间DP)
题目意思:
给定一个表达式,运算符没有优先级,求不同顺序计算,所有可能的得到的结果之和。
由于运算符没有优先级,所以有多种顺序去计算,设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)的更多相关文章
- [hdu5396 Expression]区间DP
题意:给一个表达式,求所有的计算顺序产生的结果总和 思路:比较明显的区间dp,令dp[l][r]为闭区间[l,r]的所有可能的结果和,考虑最后一个符号的位置k,k必须在l,r之间,则l≤k<r, ...
- 【BZOJ-4380】Myjnie 区间DP
4380: [POI2015]Myjnie Time Limit: 40 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 162 Solved: ...
- 【POJ-1390】Blocks 区间DP
Blocks Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5252 Accepted: 2165 Descriptio ...
- 区间DP LightOJ 1422 Halloween Costumes
http://lightoj.com/volume_showproblem.php?problem=1422 做的第一道区间DP的题目,试水. 参考解题报告: http://www.cnblogs.c ...
- BZOJ1055: [HAOI2008]玩具取名[区间DP]
1055: [HAOI2008]玩具取名 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1588 Solved: 925[Submit][Statu ...
- poj2955 Brackets (区间dp)
题目链接:http://poj.org/problem?id=2955 题意:给定字符串 求括号匹配最多时的子串长度. 区间dp,状态转移方程: dp[i][j]=max ( dp[i][j] , 2 ...
- HDU5900 QSC and Master(区间DP + 最小费用最大流)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5900 Description Every school has some legends, ...
- 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 ...
- 区间dp总结篇
前言:这两天没有写什么题目,把前两周做的有些意思的背包题和最长递增.公共子序列写了个总结.反过去写总结,总能让自己有一番收获......就区间dp来说,一开始我完全不明白它是怎么应用的,甚至于看解题报 ...
随机推荐
- HDU 4597
题目大意: 两人轮流从两堆牌从抽取最顶端或者最底部的牌,得到的分数加到自己身上,问先拿牌的最多能得多少分 记忆化搜索,2堆牌的底和顶,有四种方法,根据四种方法来找到最优解 #include <c ...
- POJ 1276 Cash Machine 【DP】
多重背包的模型,但一开始直接将N个物品一个一个拆,拆成01背包竟然T了!!好吧OI过后多久没看过背包问题了,翻出背包九讲看下才发现还有二进制优化一说........就是将n个物品拆成系数:1,2,4, ...
- Lucene、Compass学习以及与SSH的整合
一.准备 个人在学习中采用Struts2 + Hibernate3.2 + Spring2.5 + Compass2.2.0, 一下图片为本次学习中用到的jar包: 图中圈出的jar包为本次学习的主要 ...
- (在线工具)JSON字符串转换成Java实体类(POJO)
http://www.bejson.com/json2javapojo/ 付代码代码转换示例: public static FixMixedOrderResponse serialization(St ...
- Scrapy的log日志功能
Logging Scrapy提供了log功能,可以通过 logging 模块使用 可以修改配置文件settings.py,任意位置添加下面两行 LOG_FILE = "mySpider.lo ...
- 《TCP/IP详解卷1:协议》——第2章:链路层(转载)
1.引言 从图1-4可以看出,在TCP/IP协议族中,链路层主要有三个目的: (1)为IP模块发送和接收IP数据报: (2)为ARP模块发送ARP请求和接收ARP应答. (3)为RARP发送RARP请 ...
- Codeforces 659D Bicycle Race【计算几何】
题目链接: http://codeforces.com/contest/659/problem/D 题意: 若干条直线围城的湖,给定直线的端点,判断多少个转点会有危险?(危险是指直走的的话会掉进水里) ...
- C. The Two Routes---cf602C(Dij)
http://codeforces.com/problemset/problem/602/C 题目大意: 有n个城市 有m条铁路 如果两个城市没有铁路 那么一定有公路 求从1 到 n 用铁路和公 ...
- Sudoku---hdu2676(数独DFS)
http://poj.org/problem?id=2676 递归深搜 #include<stdio.h> #include<string.h> #include<alg ...
- Dividing--hdu1059(动态规划)
Problem Description Marsha and Bill own a collection of marbles. They want to split the collection a ...