【JZOJ 5219】 B
2017-07-10 15:54
162 查看
Description
n<=1000
Analysis
省选组的一道水题模型看起来要么dp要么分治的嘛,然后我一开始是想的分治,?隔开许多个块,然后每个块互不影响,单独处理
但是处理也要dp啊,还不如直接dp
容易发现,真实值不重要也不必要,重要的是相对大小
设f[i][j]表示确定完前i个数,第i个在前i个里从小到大排第j的方案数
转移显然,可以用前缀和优化
O(n^2)
Code
#include<cstdio> #include<cstring> #include<algorithm> #define fo(i,a,b) for(int i=a;i<=b;i++) #define fd(i,a,b) for(int i=a;i>=b;i--) #define efo(i,v) for(int i=last[v];i;i=next[i]) #define min(x,y) ((x)<(y)?(x):(y)) #define max(x,y) ((x)>(y)?(x):(y)) using namespace std; typedef long long ll; const int N=1005,mo=1e9+7; int n,f ,pre ; char s ; int main() { scanf("%s",s+1); n=strlen(s+1); f[0][1]=pre[0][1]=1; fo(i,1,n) { fo(j,1,i+1) if(s[i]=='I') (f[i][j]+=pre[i-1][j-1])%=mo; else if(s[i]=='D') f[i][j]=((f[i][j]+pre[i-1][i]-pre[i-1][j-1])%mo+mo)%mo; else (f[i][j]+=pre[i-1][i])%=mo; fo(j,1,i+1) pre[i][j]=(pre[i][j-1]+f[i][j])%mo; } printf("%d",pre [n+1]); return 0; }
相关文章推荐
- 【JZOJ5219】【GDOI2018模拟7.10】B
- 【jzoj5219】【GDOI2018模拟7.10】【B】【动态规划】
- [jzoj]1228. Matrix(贪心的最优性证明)
- 【JZOJ 5270】神奇的矩阵
- JZOJ5281. 【NOIP提高组模拟A组8.15】钦点 十字链表
- JZOJ1416. 生日聚餐(2017.8B组)
- 【jzoj5280】【NOIP提高组模拟A组8.15】【膜法师】
- JZOJ2017.08.16 C组
- 【JZOJ 5282】【清华集训2017模拟】等差划分数
- jzoj5290 【NOIP2017提高组A组模拟8.17】行程的交集 (树上路径交,dfs序+树状数组维护姿势)
- [jzoj]3457. 【NOIP2013模拟联考3】沙耶的玩偶(doll)(匈牙利-二分图最大匹配)
- 【JZOJ5284】 超级翻转
- JZOJ4739. 【雅礼联考GDOI2017模拟9.2】Ztxz16学图论(2017.8B组)
- 【JZOJ5262】【GDOI2018模拟8.12】树
- [jzoj]3875. 【NOIP2014八校联考第4场第2试10.20】星球联盟(alliance)(图论题,构树+缩点+LCA+并查集)
- JZOJ 5326. LCA 的统计 (Standard IO)
- 【JZOJ5287】【NOIP2017提高A组模拟8.16】最短路
- 【JZOJ5287】【NOIP2017提高组模拟】最短路
- 【JZOJ5328】【NOIP2017提高A组模拟8.22】世界线
- 【JZOJ5317】【清华集训2017模拟8.19】func