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来说,一开始我完全不明白它是怎么应用的,甚至于看解题报 ...
随机推荐
- 【dfs+理解题意+构造】【待重做】codeforces E. Ice cream coloring
http://codeforces.com/contest/805/problem/E [题意] 染色数是很好确定,最少染色数是max(si)(最小为1,即使所有的si都为0,这样是单节点树形成的森林 ...
- 给你两个字符串str1,str2,找出str2在str1中的位置
如题 题目参考链接: http://blog.csdn.net/hxz_qlh/article/details/14110221 代码来自非原创 #include <iostream> # ...
- Android广播Broadcast
Android Broadcast简单认识 Broadcast是应用程序间传输信息的一种机制,BroadcastReceiver是对发送出来的广播(Broadcast)进行过滤并接收相应的一类组件. ...
- HTTP请求示例
HTTP请求格式 当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,HTTP请求信息由3部分组成: l 请求方法URI协议/版本 l 请求头(Request Hea ...
- .net core webapi jwt 更为清爽的认证 ,续期很简单(2)
.net core webapi jwt 更为清爽的认证 后续:续期以及设置Token过期 续期: 续期的操作是在中间件中进行的,续期本身包括了前一个Token的过期加发放新的Token,所以在说续 ...
- Edit Distance(动态规划,难)
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2 ...
- 压力测试webbench(转)
最近app需要搭建后台,故此研究一下,靠谱的后台服务器..网传nginx 能达到的并发数量比apache 高. LAMP or LNMP ? 根据需求测试结果来进行选择. 首先是安装LNMP测试完后 ...
- Java面试题总结之Java基础(二)
Java面试题总结之Java基础(二) 1.写clone()方法时,通常都有一行代码,是什么? 答:super.clone(),他负责产生正确大小的空间,并逐位复制. 2.GC 是什么? 为什么要有G ...
- java基础 2 static关键字
2. static关键字 变量:静态变量在内存中只存在一份,只在类第一次实例化时初始化一次,同时类所有的实例都共享静态变量,可以直接同过类名 来访问他. 方法:静 ...
- win7 休眠功能的开启与关闭
1. 打开控制面板得下面目录,编辑计划设置