hdu 5396 Expression
2015-08-18 21:44
267 查看
太弱经常暴露智商.....
最近刷的个个dp都是区间,记忆化搜索也区间
然而窝组合数递推不会,规律推错了也不造,orz~~~
这题就找个规律,直接记忆化搜索干就是了,没什么难得
贴一发丑丑的代码,匿了
最近刷的个个dp都是区间,记忆化搜索也区间
然而窝组合数递推不会,规律推错了也不造,orz~~~
这题就找个规律,直接记忆化搜索干就是了,没什么难得
贴一发丑丑的代码,匿了
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define ll __int64 const int mod=1e9+7; const int maxn=108; int a[maxn]; char b[maxn]; ll dp[maxn][maxn]; ll pig[maxn][maxn],jie[maxn]; void init() { int i,j; for(i=0;i<=100;i++) { pig[i][0]=pig[i][i]=1; for(j=1;j<i;j++) pig[i][j]=(pig[i-1][j]+pig[i-1][j-1])%mod; } } void initjie() { jie[0]=1; for(int i=1;i<=100;i++) jie[i]=jie[i-1]*i%mod; } void dfs(int l,int r) { int i; if(dp[l][r]!=-1) return; if(l==r) { dp[l][r]=a[l]; return; } ll x,y,sum=0; for(i=l;i<r;i++) { dfs(i+1,r); dfs(l,i); if(b[i-1]=='*') { if(i-l>=1&&r-i-1>=1) { sum=(sum+pig[r-l-1][i-l]*(dp[l][i]*dp[i+1][r]%mod))%mod; } else sum=(sum+dp[l][i]*dp[i+1][r])%mod; } if(b[i-1]=='-') { if(i-l>=1&&r-i-1>=1) { sum=(sum+pig[r-l-1][i-l]* ((jie[r-i-1]*dp[l][i]-jie[i-l]*dp[i+1][r])%mod))%mod; } else sum=(sum+jie[r-i-1]*dp[l][i]-jie[i-l]*dp[i+1][r])%mod; } if(b[i-1]=='+') { if(i-l>=1&&r-i-1>=1) { sum=(sum+pig[r-l-1][i-l]* ((jie[r-i-1]*dp[l][i]+jie[i-l]*dp[i+1][r])%mod))%mod; } else sum=(sum+jie[r-i-1]*dp[l][i]+jie[i-l]*dp[i+1][r])%mod; } } dp[l][r]=sum; } int main() { int i,j,n; ll sum; init(); initjie(); while(scanf("%d",&n)==1) { for(i=1;i<=n;i++) scanf("%d",&a[i]); scanf("%s",b); memset(dp,-1,sizeof(dp)); dfs(1,n); printf("%I64d\n",(dp[1] +mod)%mod); } return 0; }
相关文章推荐
- ZooKeeper 安装部署
- maven管理的java Web项目复制粘贴需要更改的地方
- QT测试小工具(串口通信)
- Skiing
- IP地址按数字大小排序
- linux学习技巧
- OS层面的恢复(数据库在Open的状态,删除表空间)
- 如何查看电脑的IP地址
- 初识 GitHub
- linux下查看文件夹的大小
- http实现虚拟主机的配置
- Centos7 把php5.4升级到php5.6
- sdnu 1078 食物链(并查集)
- 多线程dp hdu2686 Matrix
- java字符串
- 嵌入式中最重要的四个词语static,extern,volatile,const
- HDU 2084 数塔 直接求解
- 类、字段和方法
- 欢迎使用CSDN-markdown编辑器
- 多线程