日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品一区二区无码免费看片 | 国产精品一区二区人妻喷水 | 3d动漫精品啪啪一区二区三区免费 | 亚洲久久色 | 91国产精品 | 深夜福利亚洲 | 日本少妇作爱视频 | 97色伦图片 | 日韩黄色短片 | 日韩一级在线观看 | 欧美啪啪一区二区 | 成人在线观看免费爱爱 | 69福利社区 | 欧美日韩二三区 | 欧洲一级黄色片 | 午夜专区 | 在线不卡一区二区 | 国语对白做受xxxxx在线中国 | 天堂久久av | 美女视频国产 | 三级男人添奶爽爽爽视频 | 亚洲精品日韩综合观看成人91 | 日韩精品一区二区三区不卡 | 欧美国产专区 | 国产在线观看精品 | 九色视频在线观看 | 中文字幕在线观看二区 | 国产在线观看黄色 | 欧美日韩在线视频免费观看 | 国产精品久久久久三级无码 | 黄色国产毛片 | 丁香六月天婷婷 | 四虎影库在线播放 | 欧美日韩国产一级 | 国产一区二区色 | 国产网址在线 | 日韩美女啪啪 | 一级黄色在线播放 | 国内精品国产三级国产aⅴ久 | 亚洲天堂麻豆 | 黄污视频在线播放 | 蜜乳av中文字幕 | 午夜影院免费看 | 久久久一级黄色片 | 国产欧美一区二区三区视频在线观看 | 一级黄色大片视频 | 亚洲五十路 | 在线一区二区三区四区五区 | 免费成人黄色网址 | 放几个免费的毛片出来看 | 欧美精品免费一区二区三区 | 青草视频免费看 | 学生孕妇videosex性欧美 | 亚洲在线观看av | 毛片1000部免费看 | 亚洲国产精品视频在线观看 | av影视网| 狠狠爱五月婷婷 | av成人动漫 | 久久精品婷婷 | 日本黄色动态图 | av免费观看网 | 老头老太吃奶xb视频 | 在线播放日韩av | 久久久亚洲精品视频 | 女人天堂网 | aaa国产 | 嫩草亚洲 | 亚洲色图久久 | 99国产精品久久久久99打野战 | 国产主播啪啪 | 亚洲色偷偷综合亚洲av伊人 | 亚洲熟妇无码一区二区三区导航 | 中文字幕av影院 | 99久久精品日本一区二区免费 | 欧美浓毛大泬视频 | 国产网站在线 | 色窝在线| 村上里沙番号 | 一区一区三区产品乱码 | 久久不卡免费视频 | 欧美成人aaa片一区国产精品 | 天天av天天操 | 中国妇女做爰视频 | www.夜夜操| 四虎国产 | 国产丝袜久久 | 一区二区三区 中文字幕 | 亚洲综合日韩在线 | jizzjizz日本人 | 欧美俄罗斯乱妇 | 可以免费看av的网址 | 日本在线看片 | 蜜臀av一区二区三区有限公司 | 夜夜福利 | 免费一级黄色 | 国产精品无码一区二区三 | 国产精品一品二区三区的使用体验 | 一区二区内射 |