題目描述
給出乙個長度不超過200的由小寫英文本母組成的字母串(約定;該字串以每行20個字母的方式輸入,且保證每行一定為20個)。要求將此字母串分成k份(1輸入描述
第一行為乙個正整數(0輸出描述
每行乙個整數,分別對應每組測試資料的相應結果。
樣例輸入
11 3
thisisabookyouareaoh4is
aoksab樣例輸出7分析
這道題屬於劃分型的動態規劃,首先要獲得不同區間內單詞的數目,採用二維陣列a進行儲存,然後再進行劃分。
#include#includeusing namespace std;
#define n 200 + 10
int a[n][n],dp[n][n];
//a[i][j]表示i到j之間有多少個單詞
//dp[i][j]中i表示前i+1(i從0開始)個字元,j表示j次劃分
string w[100];
int main()
cin >> s;
for(int i = 0; i < s; i++)
cin >> w[i];
for(int i = 0; i < t.size(); i++)//從i的位置向前找
for(int j = i; j >= 0; j--)
if(n == w[k].size()) }}
}for(int i = 0; i < t.size(); i++)
dp[i][0] = a[0][i];//前i+1個字元分成乙份
for(int i = 0; i < t.size(); i++)
for(int j = 1; j < k; j++)//劃分的次數
for(int k = j - 1; k < i; k++)//至少為j份才可以進行j-1次劃分
dp[i][j] = max(dp[i][j],dp[k][j - 1] + a[k + 1][i]);
cout << dp[t.size() - 1][k - 1] << endl;//這裡k-1是因為劃了k-1次
} return 0;
}
1040 統計單詞個數
2001年noip全國聯賽提高組 時間限制 1 s 空間限制 128000 kb 題目等級 gold 題解給出乙個長度不超過200的由小寫英文本母組成的字母串 約定 該字串以每行20個字母的方式輸入,且保證每行一定為20個 要求將此字母串分成k份 1輸入描述 input description 第一...
統計乙個文字的字元 單詞數
文字操作是最常見的,以例子的形式來驅動程式的編寫 encoding utf 8 import time keep defnormalize s 大寫轉換成小寫,並且剔除數字等開頭或不在列表中的字元,返回正常字串 result for c in s.lower if c in keep result ...
洛谷P1026 NOIP2001 統計單詞個數
剛看到這個題一直在糾結怎麼劃分成k份再轉移,事實證明我想多了 先預處理出陣列w i j 表示從i到j的單詞個數,如果有多個以i開頭的單詞,只統計一次即可 dp i j 表示從0到i劃分成j份,則 dp i j max dp k j 1 w k 1 j j 1 k 順便 一下用貪心a掉此題的zy大神 ...