【DP】單詞的劃分

題目描述

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

輸入

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

輸出

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

樣例輸入

realityour
5
real
reality
it
your
our

樣例輸出

2

提示

(原字符串可拆成real+it+your或reality+our,由于reality+our僅為兩個部分,因此最優解為2,另外注意,單詞列表中的 每個單詞都可以重復使用多次也可以不用

思路:

我們設 dp(i)dp(i)dp(i) 表示原字符串的前 iii 個字符的單詞最小劃分總數
那么答案就是 dp(n)dp(n)dp(n) nnn原字符串的長度

初始化: dp(0)=0dp(0) = 0dp(0)=0 (因為一個單詞也沒有) [dp(1)[dp(1)[dp(1) ~ dp(n)]dp(n)]dp(n)] 為最大值
怎么轉移呢?
對于每個長度,我們枚舉所有的單詞,我們可以使用 string 的 substr 函數求出末尾的字串,如果當前末尾的字串和當前枚舉的單詞可以對得上,那么我們就選這個單詞
dp(i)=min?(dp(i),dp(i?len)+1)dp(i) = \min(dp(i), dp(i - len) + 1)dp(i)=min(dp(i),dp(i?len)+1)
否則我們就不動這個單詞

最后輸出 dp(n)dp(n)dp(n) 即可

代碼

#include <iostream>
#include <string>
#include <vector>
#include <climits> // 使用INT_MAX
using namespace std;typedef string Word_t; // 定義Word_t為string類型
int main() {Word_t Ans_Cin;cin >> Ans_Cin; // 輸入單詞int n; // 單詞個數cin >> n; // 輸入單詞個數vector<Word_t> words(n + 1); // 定義單詞數組for (int i = 1; i <= n; ++i) cin >> words[i]; // 輸入單詞// dp第一步: 初始化vector<int> dp(Ans_Cin.size() + 1, INT_MAX - 10);dp[0] = 0;// dp第二步: 求解問題int Size = Ans_Cin.size(); // 長度for (int i = 1; i <= Size; i++){for (int j = 1; j <= n; j++){int len = words[j].size();if (i - len >= 0){string TempGetStr = Ans_Cin.substr(i - len, len); // 處理字符串if (TempGetStr == words[j]) // 如果相等dp[i] = min(dp[i], dp[i - len] + 1);}}}cout << dp[Size];return 0;
}

時間復雜度分析

狀態總數為 O(nk)O(nk)O(nk) nnn 是字符串的長度,kkk 是單詞個數
每次轉移是 O(len)O(len)O(len) 的,lenlenlen 是單詞的長度

所以時間復雜度是 O(nklen)O(nklen)O(nklen) 因為他們最大的值都是 100100100, 所以時間復雜度大約就是 O(n3)O(n^3)O(n3)
完全可以過

Tips: 機器每秒進行大約 10810^8108 次運算,在 n=100n=100n=100 的情況下,最大運算量大約是 O(100×100×100)O(100 \times 100 \times 100)O(100×100×100) 也就是 10610^6106 次運算,后者是前者的 100100100 倍,所以也是快的飛起,最大 1ms1ms1ms 跑完

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/93343.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93343.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93343.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

UniApp 中使用 tui-xecharts插件(或類似圖表庫如 uCharts)

要在 UniApp 中使用 tui-xecharts插件&#xff08;或類似圖表庫如 uCharts&#xff09;&#xff0c;需遵循以下步驟。以下流程以 ??uCharts??&#xff08;官方推薦的高性能跨平臺圖表庫&#xff09;為例&#xff0c;因其在 UniApp 生態中更成熟且文檔完善。若需使用 tui-xe…

順序表 —— OJ題

在上一篇文章中簡單介紹了順序表&#xff0c;這一篇文章講解下一個比較經典的題&#xff1a;楊輝三角先看一下什么是楊輝三角下面解釋&#xff1a;大概就是這個規律。而 ta 其實就是二維數組 即&#xff1a;0 1 1 1 1 2 1 2 1 3 1 3 3 1 4 1 4 6 4 1然后看一下這個題的要求…

基于單片機的防酒駕系統設計

一、引言1.1 研究背景與意義隨著社會經濟的快速發展&#xff0c;汽車保有量持續攀升&#xff0c;道路交通安全問題愈發凸顯。酒后駕駛作為交通事故的主要誘因之一&#xff0c;嚴重威脅著人們的生命財產安全。據統計&#xff0c;全球每年因酒駕造成的交通事故死亡人數高達數十萬…

Redis面試精講 Day 22:Redis布隆過濾器應用場景

【Redis面試精講 Day 22】Redis布隆過濾器應用場景 在高并發、大數據量的互聯網系統中&#xff0c;如何高效判斷一個元素是否存在于集合中&#xff0c;是緩存設計中的關鍵問題。尤其是在面對緩存穿透——即惡意或無效請求頻繁查詢不存在的數據&#xff0c;導致數據庫壓力劇增—…

Spark Shuffle中的數據結構

文章目錄1.Shuffle中的三種數據結構2.AppendOnlyMap原理2.1 聚合2.2 擴容2.3 排序2.4 為什么是數組&#xff1f;3.ExternalAppendOnlyMap原理3.1 工作原理3.2 AppendOnlyMap大小估計3.2.1 為什么要估計大小&#xff1f;3.2.2 估計大小淺析3.2.2.1 什么時候采樣&#xff1f;3.2.…

告別在線轉換風險:本地運行的PDF轉Word技術評測

Word文檔&#xff08;.docx&#xff09;是可編輯的主流辦公格式&#xff0c;支持靈活修改文字、排版、圖片、表格等。它的體積僅有5.5M&#xff0c;小巧不占空間&#xff0c;且轉換不限文件大小&#xff0c;隨用隨轉&#xff0c;毫無限制。初次使用需完成一次安裝&#xff0c;之…

整體設計 符號學與詮釋學融合的整體設計框架(本篇暫時命名)--PromptPilot (助手)答問之1

說明 本系列篇&#xff08;分多篇&#xff09;是就前面 已經和騰訊元寶就“整體設計”的討論內容 再和 PromptPilot &#xff08;助手&#xff09;的再次溝通。但內容做了部分修正一邊 更準確和完整。摘要&#xff08;CSDN的AI助手提取的&#xff09;符號學與詮釋學融合的整體設…

Font shape `TU/ptm/m/n‘ undefined(Font) using `TU/lmr/m/n‘ instead

一、警告內容 這是 LaTeX 字體選擇機制輸出的信息。我們可以把 TU/ptm/m/n 分解來看&#xff1a; TU → 編碼 (font encoding) TU 表示 Unicode TeX encoding&#xff0c;即新版 XeLaTeX/LuaLaTeX 下的 Unicode 字體編碼。 ptm → 字體族 (family) ptm 代表 Times 字體 (PostS…

拒絕造輪子(C#篇)ZLG CAN卡驅動封裝應用

拒絕造輪子&#xff08;C#篇&#xff09;ZLG CAN卡驅動封裝應用 今天給大家介紹一個封裝完善的CAN卡類。 背景 在面對常規開發場景&#xff0c;開發者對復雜SDK進行封裝和測試。閱讀相關開發資料和理解SDK的DEMO程序。 開篇 如果你也有同樣的煩惱&#xff0c;那就來看看今…

機器學習相關算法:回溯算法 貪心算法 回歸算法(線性回歸) 算法超參數 多項式時間 樸素貝葉斯分類算法

整理了一張“機器學習相關算法與概念速覽表”&#xff0c;既包含定義&#xff0c;也配上了容易記住的例子&#xff0c;讓大家一眼就能抓住它們的特點&#xff1a; &#x1f916; 機器學習與相關算法&概念 名稱定義生動例子典型應用場景回溯算法通過不斷嘗試和回退來尋找問…

vue+微信小程序 五角星

說明&#xff1a;這個是先畫出一個72度菱形&#xff0c;長中長線和短中長線按照一定比例&#xff0c;然后把菱形分層十份&#xff0c;最后再把菱形進行旋轉形成五角星&#xff0c;最后顯示標簽&#xff0c;因為一直對不上所以對標簽做了點操作 <template><view class&…

Prometheus + Grafana 深度玩法:從零到智能化監控體系

0. 寫在前面&#xff1a;為什么你需要“神器”而非“常用命令老楊折騰監控系統可是有年頭了&#xff0c;最早還用過 Cacti、Zabbix&#xff0c;那會兒做個儀表盤都得像雕花一樣慢慢刻。后來 Prometheus 出來之后&#xff0c;我的第一反應是&#xff1a;這玩意兒的時間序列和標簽…

YOLO、DarkNet和深度學習如何讓自動駕駛看得清?

【導讀】 本文提出 DarkNet-YOLO 工業級實踐框架&#xff0c;通過引入 殘差優化結構 與 多尺度特征融合技術&#xff0c;在保持實時檢測精度同時顯著提升復雜場景適應性。 目錄 一、目標檢測的進化之路&#xff1a;從“兩步走”到“一眼定乾坤” YOLO的核心思想&#xff1a…

使用 HTML5 Canvas 打造炫酷的數字時鐘動畫

在 Web 開發中&#xff0c;HTML5 的 canvas 元素為我們帶來了強大的繪圖能力&#xff0c;結合 JavaScript&#xff0c;可以實現各種酷炫的效果。今天&#xff0c;我們將深入剖析一段經典的 彩色數字時鐘動畫 代碼&#xff0c;并理解它是如何通過物理模擬實現數字切換時的炫酷粒…

XCZU6CG-2FFVC900I Xilinx FPGA AMD ZynqUltraScale+ MPSoC

XCZU6CG-2FFVC900I Xilinx FPGA&#xff08; AMD&#xff09;Zynq UltraScale MPSoC 。在處理系統&#xff08;PS&#xff09;方面&#xff0c;XCZU6CG 系列通常集成了 ARM Cortex-A53 應用核與 Cortex-R5 實時核的組合&#xff08;典型為 A53 多核 R5 雙核組合&#xff09;&…

Navicat 詢問 AI | 優化 SQL 查詢

近期&#xff0c;我們發布了 Navicat 17.3 版本。這一版本實現了全方位升級&#xff0c;包括對 AI 功能大升級、支持達夢、金倉、瀚高、支持阿里通義千問等 AI 大模型&#xff0c;支持凝思 OS 以及多項 UI 改進。今天&#xff0c;我們將深入介紹 Navicat AI 功能之“詢問 AI ”…

4.6 Vue 3 中的模板引用 (Template Refs)

在 Vue 3 中&#xff0c;ref 是一個核心的響應式 API&#xff0c;但它在模板中還有另一個非常重要的用途&#xff1a;獲取對 DOM 元素或子組件實例的直接引用。這就是我們所說的“模板引用”。核心概念目的&#xff1a;讓你在父組件中能夠直接訪問并操作特定的 DOM 元素或子組件…

模式匹配自動機全面理論分析

模式匹配是什么 模式匹配是計算機科學中一個基礎且重要的問題&#xff0c;廣泛應用于文本編輯、信息檢索、網絡安全、生物信息學等多個領域。簡單來說&#xff0c;模式匹配就是在一個主文本中查找一個或多個特定模式串的出現位置。隨著計算機處理能力的提升和數據規模的擴大&am…

AI 搜索時代:引領變革,重塑您的 SEO 戰略

隨著谷歌轉向人工智能驅動的答案&#xff0c;使用以關鍵字和反向鏈接為中心的過時和傳統的 SEO 策略不再起到任何作用。 由于 Google AI Overviews 和零點擊搜索的興起&#xff0c;自然點擊量正在下降&#xff0c;用戶無需點擊任何網站即可直接在 Google 的搜索結果頁面上獲得答…

【網站深入seo方法】

目錄 ①對于更成熟的網站&#xff0c;簡單的index.html的入口文件的seo已經無法滿足&#xff0c;需要在商品詳情不同商品被搜索時賦予不同的title和description。 ②通過設置站點所有頁面都新增Canonical標簽&#xff0c;指定規范鏈接地址給谷歌并規避聯盟的重復內容頁面。 ③…