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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

hdu-5745 La Vie en rose bitset

發布時間:2023/12/20 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu-5745 La Vie en rose bitset 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://acm.hdu.edu.cn/showproblem.php?pid=5745

第一次使用bitset這個東西,優點是可以常數優化,而此題優雅的bitset轉移剛好可以卡過

轉移方程是看的這篇博客,

http://blog.csdn.net/u012015746/article/details/51992281

首先得出一個?dp式子,dp[i][j][k]表示?A匹配到?iB匹配到?j?
而?k表示?Bj的交換情況,0為不動,1與前面交換,2與后面交換?
轉移方程為:?
dpi,j,0=dpi?1,j?1,0?or?dpi?1,j?1,1,?(Ai==Bj)?
dpi,j,1=dpi?1,j?1,2,?(Ai==Bj?1)?
dpi,j,2=dpi?1,j?1,0?or?dpi?1,j?1,1,?(Ai==Bj+1)

此題數據改過,雖然博主的代碼現在提交是t的,但轉移方程很好理解

在轉移的時候稍微改改減少幾次位運算次數就可以了

#include<bits/stdc++.h> #define eps 1e-9 #define PI 3.141592653589793 #define bs 1000000007 #define bsize 256 #define MEM(a) memset(a,0,sizeof(a)) typedef long long ll; using namespace std; char s[100005],p[5005]; char ans[100005]; int n,m; bitset<100005>dp[2][3]; bitset<100005>v[26]; int main() {int T,i,j; // while(cin>>T)cin>>T;{while(T--){cin>>n>>m;scanf(" %s",s);scanf(" %s",p);for(i=0;i<26;i++)v[i].reset();for(i=0;i<n;i++){v[s[i]-'a'].set(n-i-1);}int now=1,pre=0;dp[0][0]=v[p[0]-'a'];dp[0][1].reset();if(m!=1)dp[0][2]=v[p[1]-'a'];for(i=1;i<m;i++){int i1=p[i]-'a';int i2=p[i-1]-'a';int i3=p[i+1]-'a';dp[now][0]=((dp[pre][0]|dp[pre][1])>>1)&v[i1];dp[now][1]=(dp[pre][2]>>1)&v[i2];if(i!=m-1)dp[now][2]=((dp[pre][0]|dp[pre][1])>>1)&v[i3];swap(now,pre);}for(i=0;i<n;i++){if(n-i-m>=0&&(dp[pre][0][n-i-m]|dp[pre][1][n-i-m]))ans[i]='1';elseans[i]='0';}ans[n]=0;printf("%s\n",ans);}}return 0;}


總結

以上是生活随笔為你收集整理的hdu-5745 La Vie en rose bitset的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。