HDU3109 Worms(字串變換類 DP)

2022-04-30 13:06:12 字數 1135 閱讀 6153

pro:開始有乙個字母蟲,然後字母蟲在每一天可以選擇自己身上的部分字母變換,變換規則形如a->bc。 現狀給定最終字母蟲的字串,求最少用了多少天。

如有規則a->bc,b->ac,c->ab;則acab可以見過三天(a-bc-acc-acac)或者兩天(a-bc-acab)得來。 規則不超過80,字串長度不超過50;

sol:dp[i][j][p]表示,最開始只有字母p,變換到[i,j]區間的最小天數。

顯然初始:dp[i][i][x]=c[i]==x?0:inf;

其他:       dp[i][j][x]=min(dp[i][k][p],dp[k+1][j][q]+1);  當且當存在規則x->pq;

經驗:在倒推比較難的情況下,我們表示的狀態可以是最初狀態。

#include#define rep(i,a,b) for(int i=a;i<=b;i++)

using

namespace

std;

const

int maxn=52

;char c[maxn],s[maxn*2][5

];int

dp[maxn][maxn][maxn];

vector

a[20],b[20

];int

main()

scanf("%s

",c+1); l=strlen(c+1

); rep(i,

1,l) rep(j,i,l) rep(k,0,19) dp[i][j][k]=l+1

; rep(i,

1,l) dp[i][i][c[i]-'

a']=0

; rep(i,

1,l) }}

}}

int ans=l+1

; rep(i,

0,19) if(dp[1][l][i]!=-1) ans=min(ans,dp[1

][l][i]);

if(ans==l+1) ans=-1

; printf(

"%d\n

",ans);

}return0;

}

hdu 字串統計

problem description 對於給定的乙個字串,統計其中數字字元出現的次數。input 輸入資料有多行,第一行是乙個整數n,表示測試例項的個數,後面跟著n行,每行包括乙個由字母和數字組成的字串。output 對於每個測試例項,輸出該串中數值的個數,每個輸出佔一行。sample input...

hdu 1274 展開字串

problem description 在紡織cad系統開發過程中,經常會遇到紗線排列的問題。該問題的描述是這樣的 常用紗線的品種一般不會超過25種,所以分別可以用小寫字母表示不同的紗線,例如 abc表示三根紗線的排列 重複可以用數字和括號表示,例如 2 abc 表示abcabc 1 a 1a表示a...

HDU 1274 展開字串

problem description 在紡織cad系統開發過程中,經常會遇到紗線排列的問題。該問題的描述是這樣的 常用紗線的品種一般不會超過25種,所以分別可以用小寫字母表示不同的紗線,例如 abc表示三根紗線的排列 重複可以用數字和括號表示,例如 2 abc 表示abcabc 1 a 1a表示a...