[BZOJ1566][NOI2009]管道取珠(DP)
2018-04-12 16:23
417 查看
1566: [NOI2009]管道取珠
Time Limit: 20 Sec Memory Limit: 512 MB
Submit: 2187 Solved: 1273
[Submit][Status][Discuss]Description
Input
第一行包含两个整数n, m,分别表示上下两个管道中球的数目。 第二行为一个AB字符串,长度为n,表示上管道中从左到右球的类型。其中A表示浅色球,B表示深色球。 第三行为一个AB字符串,长度为m,表示下管道中的情形。
Output
仅包含一行,即为 Sigma(Ai^2) i从1到k 除以1024523的余数。
Sample Input
2 1
AB
B
Sample Output
5
HINT
样例即为文中(图3)。共有两种不同的输出序列形式,序列BAB有1种产生方式,而序列BBA有2种产生方式,因此答案为5。 【大致数据规模】 约30%的数据满足 n, m ≤ 12; 约100%的数据满足n, m ≤ 500。
Source
[Submit][Status][Discuss]
平方不是随便给的。相当于A玩一次,B玩一次,最后结果相同的方案数。
类似二取方格数了,f[x1][y1][x2][y2]表示A上面取了x1个,下面x2个,B上面x2个,下面y2个,最后结果相同的方案数。
因为x1+y1=x2+y2,改成f[i][j][k]表示没人取了i个,A上面取了j个,B上面取了k个的方案数。
滚动再压掉一维。
#include<cstdio> #include<algorithm> #define rep(i,l,r) for (int i=(l); i<=(r); i++) using namespace std; const int N=510,mod=1024523; int f[2] ,n,u,v,a ,b ,m; char s1 ,s2 ; int main(){ freopen("bzoj1566.in","r",stdin); freopen("bzoj1566.out","w",stdout); scanf("%d%d",&n,&m); scanf("%s",s1+1); scanf("%s",s2+1); rep(i,1,n) a[n-i+1]=s1[i]-'A'; rep(i,1,m) b[m-i+1]=s2[i]-'A'; f[0][0][0]=1; for (int i=0; i<n+m; i++){ u=i&1,v=u^1; for (int j=0; j<=n && j<=i; j++) for (int k=0; k<=n && j<=i; k++) if (f[u][j][k]){ if (a[j+1]==a[k+1]) f[v][j+1][k+1]=(f[v][j+1][k+1]+f[u][j][k])%mod; if (a[j+1]==b[i-k+1]) f[v][j+1][k]=(f[v][j+1][k]+f[u][j][k])%mod; if (b[i-j+1]==a[k+1]) f[v][j][k+1]=(f[v][j][k+1]+f[u][j][k])%mod; if (b[i-j+1]==b[i-k+1]) f[v][j][k]=(f[v][j][k]+f[u][j][k])%mod; f[u][j][k]=0; } } printf("%d\n",f[v] ); return 0; }
相关文章推荐
- BZOJ1566 [NOI2009]管道取珠 dp
- [平方的拆分 DP] BZOJ 1566 [NOI2009]管道取珠
- [BZOJ 1566][NOI2009]管道取珠(DP)
- 【bzoj1566】【NOI2009】【管道取珠】【dp】
- bzoj 1566: [NOI2009]管道取珠【dp】
- bzoj 1566: [NOI2009]管道取珠 (DP)
- bzoj 1566 NOI 2009 管道取珠 DP 解题报告
- BZOJ1566 [NOI2009]管道取珠 【dp】
- BZOJ 1566: [NOI2009]管道取珠 另类DP
- 【BZOJ 1566】 1566: [NOI2009]管道取珠 (DP)
- [BZOJ]1566: [NOI2009]管道取珠
- bzoj1566: [NOI2009]管道取珠
- [BZOJ 1056][NOI 2009]管道取珠(DP)
- bzoj1566 [NOI2009]管道取珠
- BZOJ 1566 【NOI2009】 管道取珠
- [bzoj1566][NOI2009]管道取珠
- BZOJ1566: [NOI2009]管道取珠
- bzoj1566 [NOI2009]管道取珠
- bzoj 1566: [NOI2009]管道取珠
- 【BZOJ】1566: [NOI2009]管道取珠