poj3276
一维的dp
View Code
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 string dict[600]; 5 int dp[301]; 6 #define min(a,b) (a<b)?a:b 7 int main() 8 { 9 int W,L; 10 int pd,pm; 11 string msg; 12 cin>>W>>L; 13 cin>>msg; 14 for(int i=0;i<W;i++) 15 cin>>dict[i]; 16 dp[L]=0; 17 for(int i=L-1;i>=0;i--) 18 { 19 dp[i]=dp[i+1]+1; 20 for(int j=0;j<W;j++) 21 { 22 pd=0;pm=i; 23 int len=dict[j].length(); 24 //match 25 if(len<=L-i && msg[i]==dict[j][0]){ 26 while(pm<L){ 27 if(msg[pm++]==dict[j][pd]) 28 pd++; 29 if(pd==len){ //i~pm match dict[j] 30 dp[i]=min(dp[i],dp[pm]+(pm-i)-len); 31 break; 32 } 33 } 34 } 35 } 36 } 37 cout<<dp[0]<<endl; 38 return 0; 39 }


浙公网安备 33010602011771号