Uva 11552 Fewest Flops (三維動態規劃)

來源:互聯網
上載者:User

dp[l][i][j] 表示第l個分組以第i個字母組開頭以第j個字母組結尾時候最小劃分的塊數

n=strlen(S)/k

dp[l][i][j] 的值分兩種情況:

1.頭i在第l-1組中在位置h找到了,說明頭尾可以相接,那麼遍曆l-1組中以h結尾的所有值,求得最小值temp:

dp[l][i][j]=temp+strlen(ss[l])-1;

2.沒找到,那麼遍曆l-1組中的所有值,求得最小值temp:

if(dp[l][i][j]>temp+strlen(ss[l]))dp[l][i][j]=temp+strlen(ss[l]);

最後遍曆dp[n-1][i][j]求得最小值即可。

此題千萬要仔細,太麻煩了。

#include <iostream>#include <cstring>#include <string>using namespace std;int k,dp[1005][30][30];char ss[1005][1005],s[1005];void juhe(int h,int i,int j) //對【i,j)這個塊去重{int bz[27],l=0; memset(bz,0,sizeof(bz));for(;i<j;i++)if(bz[s[i]-'a']==0) {ss[h][l++]=s[i];bz[s[i]-'a']=1;}ss[h][l]=0;//cout<<ss[h]<<" "<<strlen(ss[h])<<endl; }int search_i(int l,int i) //在ss[l-1]中尋找ss[l][i] {for(int j=0;j<strlen(ss[l-1]);j++)if(ss[l][i]==ss[l-1][j]) return j;return -1;}int main(int argc, char *argv[]){int i,j,l,t,n,ans;cin>>t;while(t--){cin>>k>>s; n=strlen(s)/k;for(i=0;i<n;i++){juhe(i,i*k,(i+1)*k);}for(l=0;l<n;l++){for(i=0;i<strlen(ss[l]);i++){for(j=0;j<strlen(ss[l]);j++){   if(i!=j||(strlen(ss[l])==1)) //頭和尾是不能相同的,除非長度為1 {if(l==0) dp[l][i][j]=strlen(ss[l]); else //兩種情況,取小的 {   int h=search_i(l,i),temp;dp[l][i][j]=10000;if(h>=0)//找到匹配,遍曆第l-1組中以h結尾的值,得到min {   temp=10000;for(int g=0;g<strlen(ss[l-1]);g++)if(dp[l-1][g][h]<temp) temp=dp[l-1][g][h];dp[l][i][j]=temp+strlen(ss[l])-1;}   //沒有匹配的,遍曆第l-1組中所有的值,得到min temp=10000;for(int p=0;p<strlen(ss[l-1]);p++)for(int q=0;q<strlen(ss[l-1]);q++)if(dp[l-1][p][q]<temp) temp=dp[l-1][p][q];if(dp[l][i][j]>temp+strlen(ss[l])) dp[l][i][j]=temp+strlen(ss[l]);}}else dp[l][i][j]=10000; }}}for(ans=10000,i=0;i<strlen(ss[n-1]);i++)for(j=0;j<strlen(ss[n-1]);j++)if(dp[n-1][i][j]<ans) ans=dp[n-1][i][j];cout<<ans<<endl;}return 0;}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.