uva11552 字串重排

2021-06-28 04:06:16 字數 789 閱讀 1035

字串從左到右每k個為一組(保證字串長度是k的倍數),組內字串可以任意移動位置,組間順序不能變換。求變換後最少的塊數。塊的定義:連續相等的字串為乙個快

每一組為乙個單位,因此dp時需要加入組作為一維,又發現計算加入新組後塊的增量,需要知道上一組中最後乙個字元是什麼,因此狀態設計為

dp[i][j]:前i組中,最後乙個數是第i組的第j位字元的最小分塊數。

dp[i][j]=min

tmp初始化為第i組中不同字元的個數,然後比較兩組最後乙個元素是否相等,經過處理後,tmp可能會減1。細節不作說明。

預處理第i組的不同元素個數及標記第i組存在哪些字元,不然會超時

#include #include #include #include #include #define maxn 1100

#define inf 1<<29

#define mem(a,b) memset(a,b,sizeof(a))

using namespace std;

int t,k,len,m,dp[maxn][maxn],flag[maxn][30],num[maxn],ans;

char s[maxn];

void pre()}}

}int main()

else

}dp[i][j]=min(dp[i][j],dp[i-1][l]+tmp);}}

}ans=inf;

for(int j=1;j<=k;j++)

printf("%d\n",ans);

}}

UVa 232 字串處理

背景 做了三個半小時,能力堪憂啊,各種除錯,各種出錯,要分析一下,這些錯點盡量不能再錯。學習 1.對於字串陣列,要把每一行都開大一位,該位用來存放 0 否則將會出現未知輸出。也就是說 字串二維陣列的每一行都可以看做乙個字元陣列,結尾都有乙個 0 printf在用 s 格式符輸出字串,總是從給定的首位...

uva8183(字串處理)

bool vow char ch 是否是母音 void solve vector vec,char ss 將每句話分解為單詞,緊跟在單詞後的標點符號和單詞合併 int judge string s 返回乙個單詞的音節數 if flag s i y s i y 注意y的處理,如果此處的y符合此條件,後...

Uva 4394 字串刷子

題意 乙個字串刷子,每次可以將一段連續的字串變成一種顏色,給兩個字串,最少通過幾次可以將第乙個字串轉換為第二個字串 分析 首先假設第乙個字串和第二個字串全部不相同,那麼怎麼刷成第二個字串?dp i j 就是將完全不同的字串刷成第二個的最少步數,可以這樣考慮,當中間乙個字串和首字串相同,可能這樣刷兩次...