<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      *題解:P6701 [POI 1997] Genotype

      原題鏈接

      解析

      首先可以想到區間 dp。

      \(f_{l,r}\) 表示分裂出 \(T[l,r]\) 所需的最少 \(\texttt{S}\) 個數,其中 \(T\) 是目標串。

      但是仔細思考后發現根本沒有辦法轉移,于是倒閉。

      正難則反,考慮怎么合成。

      \(f_{l,r}\) 表示合成 \(T[l,r]\) 中的字符后得到的最少 \(\texttt{S}\) 個數。

      但是我們發現這個問題一點都不“子問題”,因為合成是多層的,并且合成方案還不唯一。我們需要一個更加簡單的子問題。

      \(f_{l,r}\) 表示將 \(T[l,r]\) 中的字母合成一個字母,可以合成出的字母的集合。由于字母只有 \(26\) 個,所以可以狀壓。

      這樣是好轉移的:

      \[f_{l,r}= \bigcup_{k=l}^{r-1}\operatorname{calc}(f_{l,k},f_{k + 1,r}) \]

      其中 \(\operatorname{calc}\) 求的是兩邊集合中的字符可以合成出的字符集合,可以在 \(O(|\Sigma|^2)\) 的時間內求出,\(|\Sigma|\) 為字符集大小。

      對于統計答案,可以使用我們之前棄用的狀態。設 \(g_{l,r}\) 表示合成 \(T[l,r]\) 中的字符后得到的最少 \(\texttt{S}\) 個數。

      那么,若 \(\texttt{S} \in f_{l,r}\)

      \[g_{l,r}=1 \]

      否則:

      \[g_{l,r}=\min_{k=l}^{r-1}(g_{l,k} + g_{k + 1,r}) \]

      \(g_{1,len}\) 即為所求。

      于是,我們在 \(O(|\Sigma|^2\cdot L^3\cdot k)\) 的時間內解決了這個問題。

      代碼

      #include <bits/stdc++.h>
      using namespace std;
      typedef pair<int,int> pii;
      const int N = 26 + 5,M = 100 + 5;
      int can[N][N],f[M][M],g[M][M];
      int calc(int a,int b){
      	int res = 0;
      	for(int i=0;i<26;i++)if(a & (1 << i)){
      		for(int j=0;j<26;j++)if(b & (1 << j)){
      			res |= can[i][j]; 
      		}
      	}
      	return res;
      }
      int main(){
      	ios::sync_with_stdio(false);
      	cin.tie(0);
      	int n;
      	cin>>n;
      	for(int i=1;i<=n;i++){
      		string s;
      		cin>>s;
      		can[s[1] - 'A'][s[2] - 'A'] |= 1 << (s[0] - 'A');
      	}
      	int k;
      	cin>>k;
      	while(k--){
      		string t;
      		cin>>t;
      		int m = t.size();
      		for(int i=1;i<=m;i++){
      			for(int j=1;j<=m;j++){
      				g[i][j] = 2.1e9;
      				f[i][j] = 0;
      			}
      		}
      		t = " " + t;
      		for(int i=1;i<=m;i++){
      			f[i][i] = 1 << (t[i] - 'A');
      		}
      		for(int len = 2;len <= m;len++){
      			for(int l=1;l + len - 1<=m;l++){
      				int r = l + len - 1;
      				for(int k=l;k<r;k++){
      					f[l][r] |= calc(f[l][k],f[k + 1][r]);
      				}
      				if(f[l][r] & (1 << ('S' - 'A'))){
      					g[l][r] = 1;
      				}else{
      					for(int k=l;k<r;k++){
      						g[l][r] = min(1ll * g[l][r],1ll * g[l][k] + g[k + 1][r]);
      					}
      				}
      			}
      		}
      		if(g[1][m] > 2e9){
      			cout<<"NIE\n";
      		}else{
      			cout<<g[1][m]<<'\n';
      		}
      	}
      	return 0;
      }
      
      posted @ 2025-10-16 21:28  yuyce  閱讀(0)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 人妻聚色窝窝人体WWW一区| 精品无码人妻一区二区三区| 欧美性猛交xxxx免费看| 日韩av综合中文字幕| av中文无码韩国亚洲色偷偷| 国产一区二区视频啪啪视频 | 又粗又硬又黄a级毛片| 免费无码av片在线观看播放| 亚洲国产精品久久久天堂麻豆宅男| 国内自拍小视频在线看| 视频二区中文字幕在线| 日韩一区精品视频一区二区| 天干天干啦夜天干天2017| 国产一区二区一卡二卡| 亚洲一区二区三区在线观看精品中文 | 久久精品女人天堂av免费观看| 久久一日本综合色鬼综合色| av激情亚洲男人的天堂| 国产精品欧美福利久久| 少妇人妻精品一区二区| 奇米四色7777中文字幕| 人妻系列无码专区69影院| 国产一区二区三区av在线无码观看| 国产午夜一区二区在线观看| 久久影院午夜伦手机不四虎卡| 日本精品一区二区不卡| 97一区二区国产好的精华液| 久久久亚洲欧洲日产国码αv| 亚洲精品天堂在线观看| 久久综合色之久久综合 | 亚洲色大成网站www永久男同| 中文字幕人妻互换av久久| 欧美怡春院一区二区三区| 濮阳县| 乱码中文字幕| 久青草久青草视频在线观看| 一区二区三区人妻无码 | 日夜啪啪一区二区三区| 97亚洲熟妇自偷自拍另类图片| 97国产精品人人爽人人做| 国产一区二区av天堂热|