日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

tyvj1102 单词的划分

發(fā)布時間:2024/1/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 tyvj1102 单词的划分 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

描述

有一個很長的由小寫字母組成字符串。為了便于對這個字符串進行分析,需要將它劃分成若干個部分,每個部分稱為一個單詞。出于減少分析量的目的,我們希望劃分出的單詞數越少越好。你就是來完成這一劃分工作的。

輸入格式

第一行,一個字符串。(字符串的長度不超過100)
第二行一個整數n,表示單詞的個數。(n<=100)
第3~n+2行,每行列出一個單詞。

輸出格式

一個整數,表示字符串可以被劃分成的最少的單詞數。

測試樣例1

輸入

realityour?
5?
real?
reality?
it?
your?
our

輸出

2

備注

(原字符串可拆成real+it+your或reality+our,由于reality+our僅為兩個部分,因此最優(yōu)解為2,另外注意,單詞列表中的每個單詞都可以重復使用多次,也可以不用) #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #include<vector> using namespace std; const int sed = 31,Sed = 131,mod = 70177,Mod = 92311; int n,m,dp[205]; string a[205],s; vector<int> h[mod]; int main(){cin>>s>>n;for(int i = 1;i <= n;i++){cin>>a[i];int hash = 0,Hash = 0;for(int j = 0;j < a[i].size();j++){hash = (hash * sed + a[i][j]) % mod;Hash = (Hash * Sed + a[i][j]) % Mod;}h[hash].push_back(Hash);}m = s.size();for(int i = 1;i <= m;i++) dp[i] = 999;for(int i = 1;i <= m;i++){for(int j = i;j >= 1;j--){int hash = 0,Hash = 0;for(int k = j - 1;k <= i - 1;k++){hash = (hash * sed + s[k]) % mod;Hash = (Hash * Sed + s[k]) % Mod;}bool ok = false;for(int k = 0;k < h[hash].size();k++){if(h[hash][k] == Hash){ok = true;break;}}if(ok) dp[i] = min(dp[i],dp[j-1] + 1);}}cout<<dp[m];return 0; }

?

轉載于:https://www.cnblogs.com/hyfer/p/5791414.html

總結

以上是生活随笔為你收集整理的tyvj1102 单词的划分的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。