日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[BZOJ 1879][SDOI 2009]Bill的挑战 题解(状压DP)

發(fā)布時間:2025/6/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [BZOJ 1879][SDOI 2009]Bill的挑战 题解(状压DP) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

[BZOJ 1879][SDOI 2009]Bill的挑戰(zhàn)

Description

Solution

1.考慮狀壓的方式。

方案1:如果我們把每一個字符串壓起來,用一個布爾數(shù)組表示與每一個字母的匹配關系,那么空間為26^50,爆內(nèi)存;

方案2:把每一個串壓起來,多開一維記錄匹配字符,那么空間為nlen26,合法,但不便于狀態(tài)的設計和轉(zhuǎn)移;

方案3:把每一個串同一個位置的字符放在一起,用一個布爾數(shù)組記錄與每一個小寫字母的匹配關系,那么空間為26^15*len,爆內(nèi)存;

方案4:把每一個串同一個位置的字符壓起來,用多開一維的整形數(shù)組記錄與每一個小寫字母的匹配關系,空間為2^15*len,合法;

采用方案4,那么關系具體的記錄方式就是,開一個壓縮數(shù)組r[2^15][len],r[i][j]表示所有串第i位與第j個小寫字母的匹配情況:

例如,第1到n個串的第i位分別為:?,a, b,c,那么他們與'a'的匹配情況為r[i][0]=0011;

void init(){for(R int i=0;i<len;++i)//第i列 for(R int x=0;x<26;++x){//對'a'增量為x r[i][x]=0;for(R int k=0;k<n;++k)//第k個串 if(s[k][i]=='?'||s[k][i]=='a'+x)r[i][x]|=(1<<k);} }

2.考慮DP的過程

方案1:f[i][j]表示當前匹配長度位i,狀態(tài)為j,實際上也就是符合要求的匹配情況為j時的方案數(shù)

方案2:f[i][j]表示當前匹配到第i位,狀態(tài)為j時的方案數(shù);

兩種方案均可,只是第一種的i永遠比第二種的i多1罷了。

但是我們要采用方案1,因為初始化時,未匹配情況應該只有一個那就是111...111,所以對于第一種情況初始化就非常簡單,也就是f[0][(1<<n)-1]=1;

然后就是轉(zhuǎn)移,我們發(fā)現(xiàn)當且僅當前一位時當前狀態(tài)合法才可轉(zhuǎn)移,我們轉(zhuǎn)移采用擴展狀態(tài)的方式,即在當前狀態(tài)上枚舉增加狀態(tài),所以狀態(tài)轉(zhuǎn)移方程是:

(f[i][j&r[i-1][x]]+=f[i-1][j])%=mod;

Code

#include<iostream> #include<cmath> #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #define R register typedef long long ll; using namespace std;const int mod=1e6+3;string s[20]; int n,m,r[51][50010],f[51][50010];inline int lowbit(int x){return x&-x;}void init(){cin>>n>>m;memset(f,0,sizeof(f));for(R int i=0;i<n;++i)cin>>s[i];int len=s[0].size();for(R int i=0;i<len;++i)//第i列 for(R int x=0;x<26;++x){//對'a'增量為x r[i][x]=0;for(R int k=0;k<n;++k)//第k個串 if(s[k][i]=='?'||s[k][i]=='a'+x)r[i][x]|=(1<<k);} }void work(){int lim=(1<<n)-1;int len=s[0].size();f[0][lim]=1;for(R int i=1;i<=len;++i)for(R int j=0;j<=lim;++j)//狀態(tài) if(f[i-1][j])//如果當前前一列子集被更新過,即要擴展的狀態(tài)合法 for(R int x=0;x<26;++x)//對'a'增量為x(f[i][j&r[i-1][x]]+=f[i-1][j])%=mod; int ans=0;for(R int i=0;i<=lim;++i){int temp=i,cnt=0;while(temp){cnt++;temp-=lowbit(temp);}if(cnt==m) (ans+=f[len][i])%=mod;}printf("%d\n",ans); } int main(){ios::sync_with_stdio(false);int t;cin>>t;while(t--){init();work();}return 0; }

轉(zhuǎn)載于:https://www.cnblogs.com/COLIN-LIGHTNING/p/9062662.html

總結(jié)

以上是生活随笔為你收集整理的[BZOJ 1879][SDOI 2009]Bill的挑战 题解(状压DP)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲精品无码专区 | 91青青视频 | 女人的av| 中文字幕人妻一区 | 欧美在线视频一区二区 | 亚洲精品一区二区三区蜜臀 | 中文字幕日日 | 2017狠狠干 | 91视频一区二区 | 男人天堂视频在线观看 | 黄色1级视频 | 国产免费一区二区三区三州老师 | 亚洲国产一区视频 | 日日干日日操 | 欧美成人三级在线视频 | 91久久精品无码一区二区 | 天堂网av中文字幕 | 免费在线a | 久久日本精品字幕区二区 | 国产精品伦一区二区三级古装电影 | 色综合久久精品亚洲国产 | 亚州久久久 | 日本www高清视频 | 动漫美女被吸乳奶动漫视频 | 成人日韩欧美 | 日韩精品视频免费看 | 在线一级视频 | 亚洲三级黄色 | 人妻 校园 激情 另类 | 日韩精品一区二区av | 亚洲一级免费视频 | www.久久久.com | 国产黄a三级三级看三级 | 麻豆国产免费 | av大全免费 | 国产精选视频在线观看 | 青青草91久久久久久久久 | 精品网站999| 男人影院在线观看 | 国产一区二区视频在线观看 | 日韩一级黄色大片 | 天天干妹子| 中国黄色a级| 色吧婷婷 | 婷婷俺也去 | 精品日本一区二区三区在线观看 | av在线免| 午夜欧美激情 | 欧美少妇一区二区三区 | 欧美91成人网 | 久久精品视频观看 | 色妹子综合| 咪咪色图 | 日韩精品视频在线观看免费 | 秋霞在线视频观看 | 伊人福利在线 | 久射网| 亚洲av成人精品一区二区三区在线播放 | 久久人人做 | 日本不卡网 | 黄色成人毛片 | 激情六月| 国产精品一区免费观看 | 欧亚在线视频 | 97avcc | 国产丝袜自拍 | av毛片在线播放 | 久久精品欧美一区二区三区麻豆 | 黑人操日本女优 | 亚洲精品一区二区口爆 | 欧美一二三区 | 男人天堂五月天 | 在线色资源 | 羞羞的视频在线观看 | 狠狠干在线观看 | 久久人妻少妇嫩草av无码专区 | 国产特黄毛片 | 大伊人网 | 亚洲精品高潮 | 女人久久| 久久五十路 | av在线播放器 | 国产在线拍揄自揄拍无码视频 | 久久精品一二 | 欧美性生交xxxxx久久久缅北 | 国产成人无码av在线播放dvd | 就是喜欢被他干 | 亚洲精品综合网 | 手机亚洲第一页 | 91蜜桃婷婷狠狠久久综合9色 | 日韩制服诱惑 | 国产在线一二三区 | 婷婷久久久久久 | 激情成人综合网 | 日韩av免费在线播放 | 成人无码一区二区三区 | 日韩a级一片 | 天堂欧美城网站 | 亚洲国产精 |