BZOJ2958 序列染色(动态规划)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                BZOJ2958 序列染色(动态规划)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                令f[i][0/1/2][0/1]表示前i位,不存在滿足要求的B串和W串/存在滿足要求的B串不存在W串/存在滿足要求的B串和W串,第i位填的是B/W的方案數。轉移時考慮連續的一段填什么。大討論一波后瞎優化一波就成線性的了。k=1應該是要特判一下的不過數據里沒有那就不管了。
成功的把這么短的題面都看錯了一次。弱智dp寫的心態爆炸。
#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; int read() {int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f; } #define N 1000010 #define P 1000000007 int n,m,a[N],pre[N][2],p[2],f[N][3][2],delta[3][2]; void inc(int &x,int y){x+=y;if (x>=P) x-=P;} int main() { #ifndef ONLINE_JUDGEfreopen("bzoj2958.in","r",stdin);freopen("bzoj2958.out","w",stdout);const char LL[]="%I64d\n"; #elseconst char LL[]="%lld\n"; #endifn=read(),m=read();char c=getchar();while (c<'A'||c>'Z') c=getchar();for (int i=1;i<=n;i++){a[i]=(c=='X')?2:(c=='B'?0:1);if (a[i]<2) p[a[i]]=i;pre[i][0]=p[0];pre[i][1]=p[1];c=getchar();}a[0]=2;f[0][0][0]=f[0][0][1]=1;delta[0][0]=(a[1]!=1),delta[0][1]=(a[1]!=0);for (int i=1;i<=n;i++){f[i][0][0]=delta[0][0],f[i][1][0]=delta[1][0],f[i][2][0]=delta[2][0];f[i][0][1]=delta[0][1],f[i][1][1]=delta[1][1],f[i][2][1]=delta[2][1];inc(delta[0][0],f[i][0][1]);inc(delta[1][0],f[i][1][1]);inc(delta[2][0],f[i][2][1]);inc(delta[0][1],f[i][0][0]);inc(delta[1][1],f[i][1][0]);inc(delta[2][1],f[i][2][0]);if (pre[i+1][1]<i-m+2){inc(delta[0][0],(P-f[i-m+1][0][1])%P);inc(delta[1][0],f[i-m+1][0][1]);}if (pre[i+1][0]<i-m+2){inc(delta[1][1],(P-f[i-m+1][1][0])%P);inc(delta[2][1],f[i-m+1][1][0]);}if (a[i+1]==0) delta[0][1]=delta[1][1]=delta[2][1]=0;if (a[i+1]==1) delta[0][0]=delta[1][0]=delta[2][0]=0;}cout<<(f[n][2][0]+f[n][2][1])%P;return 0; }?
轉載于:https://www.cnblogs.com/Gloid/p/9644349.html
總結
以上是生活随笔為你收集整理的BZOJ2958 序列染色(动态规划)的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: leetcode 152. Maximu
 - 下一篇: SQL数据库学习-简单查询