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...