區間 dp 系列 題解

1.洛谷 P4342 IOI1998 Polygon

我的博客

2.洛谷 P4290 HAOI2008 玩具取名

題意

某人有一套玩具,并想法給玩具命名。首先他選擇 W, I, N, G 四個字母中的任意一個字母作為玩具的基本名字。然后他會根據自己的喜好,將名字中任意一個字母用 W, I, N, G 中任意兩個字母代替,使得自己的名字能夠擴充得很長。

現在,他想請你猜猜某一個很長的名字,最初可能是由哪幾個字母變形過來的。

四個整數 W , I , N , G W, I, N, G W,I,N,G,表示每一個字母能由幾種兩個字母所替代:

  • 接下來 W W W 行,每行兩個字母,表示 W 可以用這兩個字母替代。

  • 接下來 I I I 行,每行兩個字母,表示 I 可以用這兩個字母替代。

  • 接下來 N N N 行,每行兩個字母,表示 N 可以用這兩個字母替代。

  • 接下來 G G G 行,每行兩個字母,表示 G 可以用這兩個字母替代。

  • 最后一行一個長度不超過 L L L 的字符串。表示這個玩具的名字。

一行字符串,輸出該名字可能由哪一個字母變形而得到。(按照 W, I, N, G 的順序輸出)

如果給的名字不能由任何一個字母變形而得到則輸出 The name is wrong!

L ≤ 200 L \leq 200 L200 W , I , N , G ≤ 16 W, I, N, G \leq 16 W,I,N,G16

思路

其實就是原字符串中,找其中兩個合并成特定的一個字母,問最后能否變成只有一個字母。合并問題,想到用區間 dp。

不妨給 4 4 4 個字母編號: W , I , N , G \rm W,I,N,G W,I,N,G 分別對應 1 , 2 , 3 , 4 1,2,3,4 1,2,3,4。設 f i , j , x f_{i,j,x} fi,j,x? 表示區間 [ i , j ] [i,j] [i,j] 的字符,是否可以合并成編號為 x x x 的字符。

考慮轉化為子問題:將區間 [ i , j ] [i,j] [i,j] 拆分成 [ i , k ] [i,k] [i,k] [ k + 1 , j ] [k+1,j] [k+1,j],并且分別期望用編號為 p q , p , q pq,p,q pq,p,q 的字母來覆蓋(這變量夠直觀吧)。

如果左右區間都可以被完全替換為期望字符,并且編號為 p q pq pq 的字母可以被兩個編號分別為 p , q p,q p,q 的字母并起來替代,那么 f i , j , x = 1 f_{i,j,x}=1 fi,j,x?=1

至于關系就很好處理了。我的代碼是懶人寫法:

代碼

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=203;
ll m[5];
string s;
bool vis[5][5][5],f[N][N][5];//f(i,j,x):區間[i,j]能否替換成字母編號x 
ll chg(char c)
{if(c=='W')return 1;if(c=='I')return 2;if(c=='N')return 3;return 4;
}
char print(ll i)
{if(i==1)return 'W';if(i==2)return 'I';if(i==3)return 'N';return 'G';
}
int main()
{ios::sync_with_stdio(0);for(int i=1;i<=4;i++)cin>>m[i];for(int i=1;i<=4;i++){for(int j=1;j<=m[i];j++){string t;cin>>t;vis[i][chg(t[0])][chg(t[1])]=1;}}cin>>s;ll n=s.size();s='*'+s;for(int i=1;i<=n;i++)f[i][i][chg(s[i])]=1;for(int len=2;len<=n;len++){for(int i=1;i+len-1<=n;i++){ll j=i+len-1;for(int k=i;k<j;k++)for(int pq=1;pq<=4;pq++)for(int p=1;p<=4;p++)for(int q=1;q<=4;q++)if(vis[pq][p][q]&&f[i][k][p]&&f[k+1][j][q])f[i][j][pq]=1;}}bool flag=0;for(int pq=1;pq<=4;pq++){if(f[1][n][pq])cout<<print(pq);flag|=f[1][n][pq];}if(!flag)puts("The name is wrong!");return 0;
}

3.CF607B Zuma

題意

Genos \texttt{Genos} Genos 最近在他的手機上下載了祖瑪游戲。在祖瑪游戲里,存在 n n n 個一行的寶石,第 i i i 個寶石的顏色是 a i a_i ai?。這個游戲的目標是盡快的消滅一行中所有的寶石。

在一秒鐘, Genos \texttt{Genos} Genos 能很快的挑選出這些有顏色的寶石中的一個回文的、連續的子串,并將這個子串移除。每當一個子串被刪除后,剩余的寶石將連接在一起,形成一個新的行列。

求把整個寶石串都移除的最短時間。

1 ≤ n ≤ 500 1 \le n \le 500 1n500

思路

合并就考慮區間 dp,設 f i , j f_{i,j} fi,j? 表示區間 [ i , j ] [i,j] [i,j] 能否被完全消除,那么有幾個明顯的結論:

  • f i , i = 1 f_{i,i}=1 fi,i?=1
  • f i , i + 1 = { 1 , a i = a i + 1 2 , a i ≠ a i + 1 f_{i,i+1}=\left\{\begin{matrix} 1,a_i=a_{i+1}\\ 2,a_i\neq a_{i+1} \end{matrix}\right. fi,i+1?={1,ai?=ai+1?2,ai?=ai+1??
  • f i , j = f i + 1 , j ? 1 , a i = a j f_{i,j}=f_{i+1,j-1},a_i=a_j fi,j?=fi+1,j?1?,ai?=aj?

前兩點用于初始化。第三點作為特殊情況;對于樸素情況,枚舉斷點 k ∈ [ i , j ) k\in[i,j) k[i,j) 就好:
f i , j = min ? { f i , k + f k + 1 , j } f_{i,j}=\min\{f_{i,k}+f_{k+1,j}\} fi,j?=min{fi,k?+fk+1,j?}

只需討論區間長度為 3 3 3 的就好了。

代碼

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=502,inf=0x3f3f3f3f;
ll n,a[N];
ll f[N][N];//f(i,j):區間[i,j]全部消除的最短時間 
bool palin(ll l,ll r)
{for(int i=l,j=r;i<=j;i++,j--)if(a[i]!=a[j])return 0;return 1;
}
int main()
{scanf("%lld",&n);for(int i=1;i<=n;i++)scanf("%lld",&a[i]);for(int i=1;i<=n;i++){f[i][i]=1;if(a[i]==a[i+1])f[i][i+1]=1;else f[i][i+1]=2;for(int j=i+2;j<=n;j++)f[i][j]=inf;}for(int len=3;len<=n;len++){for(int i=1;i+len-1<=n;i++){ll j=i+len-1;if(a[i]==a[j])f[i][j]=f[i+1][j-1];for(int k=i;k<j;k++)f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]);}}printf("%lld",f[1][n]);return 0;
}

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

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

相關文章

天基光學圖像仿真原理簡介

一、原理簡介 天基光學圖像仿真通過數學模型和算法模擬空間目標在光學系統中的成像過程&#xff0c;核心原理可歸納為以下四部分&#xff1a; 1. 目標與背景建模? 目標運動建模?&#xff1a;利用軌道動力學模型&#xff08;如SGP4&#xff09;解析空間目標軌跡&#xff0c;…

Jetpack Compose 狀態保存機制全面解析:讓UI狀態持久化

在Android開發中&#xff0c;Jetpack Compose 的狀態管理是一個核心話題&#xff0c;而狀態保存則是確保良好用戶體驗的關鍵。本文將深入探討Compose中各種狀態保存技術&#xff0c;幫助你在配置變更和進程重建時保持UI狀態。 一、基礎保存&#xff1a;rememberSaveable reme…

【Json-Rpc #1】項目背景及環境搭建

&#x1f4c3;個人主頁&#xff1a;island1314 &#x1f525;個人博客&#xff1a;island ?? 歡迎關注&#xff1a;&#x1f44d;點贊 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f49e; &#x1f49e; &#x1f49e; 生活總是不會一帆風順&#xff0c;前進…

WPF輪播圖動畫交互 動畫縮放展示圖片

WPF輪播圖動畫交互 動畫縮放展示圖片 效果如下圖&#xff1a; XAML代碼&#xff1a; <Window x:Class"Caroursel.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/20…

為什么 npm list -g 沒顯示 node_modules??

揭秘&#xff1a;為什么 npm list -g 沒顯示 node_modules&#xff1f;&#x1f575;??♂?? 嗨&#xff0c;各位代碼探險家&#xff01;&#x1f44b; 今天我們要破解一個 npm 小謎團&#xff1a;運行 npm list -g --depth0 時&#xff0c;為什么輸出的路徑里看不到 node_…

都江堰與鄭國渠

目錄標題 一、歷史背景&#xff1a;地緣博弈下的水利突圍都江堰&#xff1a;化水患為天府的千年大計鄭國渠&#xff1a;間諜引發的戰略反轉 二、工程智慧&#xff1a;超越時代的科技奇跡都江堰&#xff1a;生態治水的典范鄭國渠&#xff1a;泥沙資源化的創舉 三、后世影響&…

鏈路聚合+vrrp

1.鏈路聚合 作用注意事項將多個物理接口&#xff08;線路&#xff09;邏輯上綁定在一起形成一條邏輯鏈路&#xff0c;起到疊加帶寬的作用1.聚合接口必須轉發速率一致。2.聚合設備兩端必須一致 配置命令 方法一 [Huawei]interface Eth-Trunk 0----先創建聚合接口&#xff0c;…

【STM32單片機】#7 定時器輸入捕獲

主要參考學習資料&#xff1a; B站江協科技 STM32入門教程-2023版 細致講解 中文字幕 開發資料下載鏈接&#xff1a;https://pan.baidu.com/s/1h_UjuQKDX9IpP-U1Effbsw?pwddspb 單片機套裝&#xff1a;STM32F103C8T6開發板單片機C6T6核心板 實驗板最小系統板套件科協 實驗&…

【android bluetooth 框架分析 01】【關鍵線程 3】【bt_jni_thread 線程介紹】

1. bt_jni_thread 職責介紹 bt_jni_thread 這個線程的作用是專門負責處理藍牙 JNI 層的消息循環&#xff0c;也可以說是 C 層和 Java 層交互的橋梁線程。 1.1 什么是 JNI 層&#xff1f;為什么需要這個線程&#xff1f; JNI&#xff08;Java Native Interface&#xff09;是 …

基于視覺語言模型的機器人實時探索系統!ClipRover:移動機器人零樣本視覺語言探索和目標發現

作者&#xff1a;Yuxuan Zhang 1 ^{1} 1, Adnan Abdullah 2 ^{2} 2, Sanjeev J. Koppal 3 ^{3} 3, and Md Jahidul Islam 4 ^{4} 4單位&#xff1a; 2 , 4 ^{2,4} 2,4佛羅里達大學電氣與計算機工程系RoboPI實驗室&#xff0c; 1 , 3 ^{1,3} 1,3佛羅里達大學電氣與計算機工程系F…

SpringBoot和微服務學習記錄Day2

微服務 微服務將單體應用分割成更小的的獨立服務&#xff0c;部署在不同的服務器上。服務間的關聯通過暴露的api接口來實現 優點&#xff1a;高內聚低耦合&#xff0c;一個模塊有問題不影響整個應用&#xff0c;增加可靠性&#xff0c;更新技術方便 缺點&#xff1a;增加運維…

網站集群批量管理-Ansible劇本與變量

復盤內容&#xff1a;鏈接指北 查看ansible命令文檔 ansible-doc -s systemd一、劇本 何為劇本: playbook 文件,用于長久保存并且實現批量管理,維護,部署的文件. 類似于腳本存放命令和變量 劇本yaml格式,yaml格式的文件:空格,冒號. 劇本未來我們批量管理,運維必會的內容. …

如何在Dify中安裝運行pandas、numpy庫(離線、在線均支持,可提供遠程指導)

pandas和numpy這兩個庫是數據科學和數據分析中經常使用的工具包&#xff0c;原生的Dify無法直接使用這兩個庫&#xff0c;需要手動安裝后才可以使用。本文將介紹如何在Dify中安裝pandas和numpy&#xff0c;并在代碼執行節點中運行使用pandas和numpy。 Dify的代碼執行節點中的py…

Helm核心概念與常見操作介紹

在管理Kubernetes集群里的應用時&#xff0c;Helm能幫上大忙&#xff0c;它把應用的部署、升級和管理變得簡單多了&#xff0c;有如是Kubernetes的 “應用商店”。 Helm的三個重要概念 三大概念最直接的理解&#xff1a;Helm 安裝 charts 到 Kubernetes 集群中&#xff0c;每…

rkmpp 解碼 精簡mpi_dec_test.c例程

rkmpp 解碼流程&#xff08;除 MPP_VIDEO_CodingMJPEG 之外&#xff09; 源碼 輸入h264碼流 輸出nv12文件 /** Copyright 2015 Rockchip Electronics Co. LTD** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file exce…

用一個實際例子快速理解MCP應用的工作步驟

已經有很多的文章介紹MCP server&#xff0c;MCP Client工作原理&#xff0c;這里不做太多介紹。但是很多介紹都只是側重介紹概念&#xff0c;實際的工作原理理解起來對初學者還是不太友好。本文以一個智能旅游咨詢系統為例&#xff0c;詳細說明在利用 Model Context Protocol&…

【LeetCode 題解】數據庫:1321.餐館營業額變化增長

一、問題描述 本題給定了一個名為 Customer 的表&#xff0c;記錄了餐館顧客的交易數據&#xff0c;包括顧客 ID、姓名、訪問日期和消費金額。作為餐館老板&#xff0c;我們的任務是分析營業額的變化增長情況&#xff0c;具體來說&#xff0c;就是計算以 7 天&#xff08;某日…

【Python】讀取xlsb或xlsx的單一或連續單元格工具類

代碼主要來自Kimi.ai&#xff0c;有修改。 優先使用工作表序號索引工作表&#xff0c;序號從1開始。 運行需要先安裝openpyxl和pyxlsb兩個第三方庫。 import openpyxl from openpyxl.utils import range_boundaries from pyxlsb import open_workbook as open_xlsbclass Exc…

【藍橋杯】動態規劃:背包問題

這篇文章主要記錄動態規劃方面的學習。 動態規劃的核心思想: 把大問題分解成小問題,記住小問題的解,避免重復計算。 動態規劃(DP)的三大特點: ①最優子結構:大問題的最優解可以由小問題的最優解推導出來 ②重疊子問題:在求解過程中會反復遇到相同的小問題 ③無后效…

華為數字芯片機考2025合集1已校正

單選 1&#xff0e;以下低功耗措施中&#xff0c;哪種不是降低電路翻轉率的方法? A.在不進行算術運算的時候&#xff0c;使這些模塊的輸入保持不變&#xff0c;不讓新的操作數進來 B.采用Gray 碼或One‐hot 碼作為狀態機編碼 C.減少電路中的glitch D.重新安排“if‐else”表達…