游戲王的題解

目錄

原題:

時間:1s? ?空間:256M

題目描述

輸入格式

輸出格式

樣例輸入

樣例輸出

題目大意:

主要思路:

dp轉移:

dp初始化:

代碼:


原題:

時間:1s? ?空間:256M
題目描述

大哈是個游戲王,盡管他的水平一言難盡,但他卻總是這樣自我稱呼。小羽說如果你能把這個游戲通關了,你才算是個真的游戲王。這個游戲一開始你有n個連在一起的顏色塊,第i個顏色塊的顏色為a_i。如果從i到j的顏色都一樣,就說明i到j屬于同一個連通塊。比如[5,5,5]屬于同一個連通塊,[4,3,9,9]有3個連通塊。游戲開始前大哈可以選擇任意一個位置作為起始點,然后開始游戲。游戲的每一輪大哈可以將包含起始點的連通塊的顏色變成任意一種其他的顏色。問大哈能將整個數組變成從1到n的連通塊所需要的最少回合數。

大哈是個游戲王,盡管他的水平一言難盡,但他卻總是這樣自我稱呼。小羽說如果你能把這個游戲通關了,你才算是個真的游戲王。這個游戲一開始你有n個連在一起的顏色塊,第i個顏色塊的顏色為a_i。如果從i到j的顏色都一樣,就說明i到j屬于同一個連通塊。比如[5,5,5]屬于同一個連通塊,[4,3,9,9]有3個連通塊。游戲開始前大哈可以選擇任意一個位置作為起始點,然后開始游戲。游戲的每一輪大哈可以將包含起始點的連通塊的顏色變成任意一種其他的顏色。問大哈能將整個數組變成從1到n的連通塊所需要的最少回合數。

輸入格式

第一行一個整數n(1 \le n \le 5000

第二行n個整數a_i1\le a_i \le 5000

輸出格式

一個整數代表最少回合數

樣例輸入

4

5 2 2 1

樣例輸出

2

題目大意:

給你n個數,要你求把所有數變成相同一個數所需的最小操作數(每次操作可以將包含起點的連通塊變為同一個數)

主要思路:

這題很難想到區間dp,我們用dp[l][r] 表示把l~r里的數變為同一個數的最小操作數,首先把每個連通塊去重(就像把【2,2,3,3,2,2,4,4,4,4】變成【2,3,2,4】。

dp轉移:

  1. v[l] == v[r] 那么就要dp[l][r] = dp[l+1][r-1]+1;注意:a[l+1]!=a[l],a[r-1]!=a[r]圖:(畫的有點草,謝謝諒解)
    轉移一圖例
  2. 否則dp[l][r] = min(dp[l+1][r],dp[l][r-1])+1;圖:(畫的有點草,謝謝諒解)
    轉移2圖例

剩下就沒有什么好說的了

dp初始化:

dp[i][i] = 0把自己變成同一個數需要0步(i<=n)

代碼:

#include<bits/stdc++.h>
using namespace std;
vector<int> v; 
int dp[5010][5010];
int main()
{int n;cin>>n;v.push_back(0);int num=-1;for(int i=1;i<=n;i++){int x;cin>>x;if(i == 1){num=x;}else{if(x == num){}else{v.push_back(x);num = x;}}}memset(dp,0x3f,sizeof(dp));for(int i=1;i<=v.size();i++){dp[i][i] = 0;}for(int len=2;len<=v.size();len++){for(int l=1;l+len-1<=v.size();l++){int r=l+len-1;if(v[l] == v[r]&&dp[l-1][r-1]!=v[l]&&dp[l-1][r-1]!=v[r]){dp[l][r] = dp[l+1][r-1]+1;}else{dp[l][r] = min(dp[l+1][r],dp[l][r-1])+1;}}}cout<<dp[1][v.size()];return 0;
}

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

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

相關文章

springboot集成knife4j詳細教程

使用原生的swagger作為接口文檔&#xff0c;功能不夠強大&#xff0c;并且默認的ui比較簡陋&#xff0c;不符合大眾審美。所以實際開發中推薦使用knife4j對swagger進行增強。knife4j的地址&#xff1a;https://gitee.com/xiaoym/knife4j 基本使用 想要使用knife4j非常簡單&…

深入學習Redis:從入門到實戰

Redis快速入門 1.初識Redis1.1.認識NoSQL1.1.1.結構化與非結構化1.1.2.關聯和非關聯1.1.3.查詢方式1.1.4.事務1.1.5.總結 1.2.認識Redis1.3.安裝Redis1.3.1.依賴庫1.3.2.上傳安裝包并解壓1.3.3.啟動1.3.4.默認啟動1.3.5.指定配置啟動1.3.6.開機自啟 1.4.Redis桌面客戶端1.4.1.R…

【VS Code開發】使用Live Server搭建MENJA小游戲并發布至公網遠程訪問

文章目錄 前言1. 編寫MENJA小游戲2. 安裝cpolar內網穿透3. 配置MENJA小游戲公網訪問地址4. 實現公網訪問MENJA小游戲5. 固定MENJA小游戲公網地址 前言 本篇教程&#xff0c;我們將通過VS Code實現遠程開發MENJA小游戲&#xff0c;并通過cpolar內網穿透發布到公網&#xff0c;分…

C++ //習題3.8 寫出下面各邏輯表達式的值。設a=3,b=4,c=5。

C程序設計 &#xff08;第三版&#xff09; 譚浩強 習題3.8 習題3.8 寫出下面各邏輯表達式的值。設a3&#xff0c;b4&#xff0c;c5。 (1) a b > c && b c (2) a || b c && b - c (3) !(a > b) && !c || 1 (4) !(x a) && (y b…

FastAPI之響應狀態碼

使用FastAPI自定義響應狀態碼 FastAPI 是一個現代、快速的 web 框架&#xff0c;用于構建API服務&#xff0c;它允許你通過Python 3.6及以上版本進行編程。一個重要的API設計是返回合適的響應狀態碼&#xff0c;這可以使得客戶端理解服務端的處理結果。本教程將向你展示如何在…

推出 Amazon EC2 C7i 實例

亞馬遜云科技宣布全面推出由定制的第 4 代英特爾至強可擴展處理器&#xff08;代號為 Sapphire Rapids&#xff09;提供支持的 Amazon Elastic Compute Cloud (Amazon EC2) C7i 實例。這些定制處理器僅在亞馬遜云科技上可用&#xff0c;與其他云提供商使用的基于 x86 的同類英特…

Kafka事務是怎么實現的?Kafka事務消息原理詳解

目錄 一、Kafka事務性消息1.1 介紹Kafka事務性消息1.2 事務性消息的應用場景1.3 Kafka事務性消息的優勢 二、Kafka事務性消息的使用2.1 配置Kafka以支持事務性消息生產者配置消費者配置 2.2 生產者&#xff1a;發送事務性消息創建Kafka生產者開始事務發送消息提交或中止事務 2.…

logstash之grok插件自定義規則學習

文章目錄 1、前言2、Grok提供的常用Patterns說明及舉例2.1 常用的表達式說明 3、使用grok插件進行日志字段處理4、案例1&#xff1a;處理nginx的日志4.1、查看nginx日志格式4.2、對nginx的日志進行過濾處理 5、案例2&#xff1a;處理tomcat的日志5.1、[安裝logstash-filter-mul…

外包干了3個月,技術退步明顯.......

先說一下自己的情況&#xff0c;大專生&#xff0c;18年通過校招進入武漢某軟件公司&#xff0c;干了接近4年的功能測試&#xff0c;今年年初&#xff0c;感覺自己不能夠在這樣下去了&#xff0c;長時間呆在一個舒適的環境會讓一個人墮落! 而我已經在一個企業干了四年的功能測…

【MySQL】在 Centos7 環境下安裝 MySQL

環境搭建 一、檢查環境二、檢查系統安裝包三、安裝 mysql yum 源四、安裝 mysql 服務五、啟動服務六、登錄 mysql七、配置 my.cnf 注意&#xff0c;我們搭建的 mysql 環境是在 Linux 的 Centos7 環境下安裝的~ 一、檢查環境 注意&#xff0c;我們在安裝和卸載中&#xff0c;先…

pytorch 中 drop_last與 nn.Parameter

1. drop_last 在使用深度學習&#xff0c;pytorch 的DataLoader 中&#xff0c; from torch.utils.data import DataLoader# Define your dataset and other necessary configurations # Create DataLoader train_loader DataLoader(dataset, batch_sizebatch_size, drop_la…

vue項目列表跳轉詳情返回列表頁保留搜索條件

需求 列表進入詳情后&#xff0c;返回詳情的時候保留搜索的條件&#xff0c;第幾頁進入的返回還在第幾頁 1.在詳情頁設置定義一個字段 mounted() {sessionStorage.setItem("msgInfo", true);},2.在獲取列表數據的時候在mounted里面判斷定義的字段 if (sessionStor…

【EI會議征稿】第二屆純數學、應用數學與計算數學國際學術會議(PACM 2024)

第二屆純數學、應用數學與計算數學國際學術會議&#xff08;PACM 2024&#xff09; 2024 2nd International Cnference on Pure, Applied and Computational Mathematics (PACM 2024) 第二屆純數學、應用數學計算數學國際學術會議 (PACM2024) 將于2024年1月19-21日在中國廈門隆…

報錯:AttributeError: ‘DataFrame‘ object has no attribute ‘reshape‘

這個錯誤通常發生在你試圖在 Pandas DataFrame 上直接使用 reshape 方法時。reshape 方法通常與 NumPy 數組相關聯&#xff0c;而不是 Pandas DataFrame。 如果你正在使用 Pandas DataFrame 并希望重新塑造它&#xff0c;你應該使用 Pandas 的重塑函數&#xff0c;如 pivot、m…

linux常用命令大全50個Linux常用命令

Linux有許多常用的命令&#xff0c;這些命令可以用來管理文件、運行程序、查看系統狀態等。以下是一些常用的Linux命令&#xff1a; pwd&#xff1a;顯示當前所在的工作目錄的全路徑名稱。cd&#xff1a;用于更改當前工作目錄&#xff0c;例如&#xff0c;若要進入Documents目…

UE5 樹葉飄落 學習筆記

一個Plane是由兩個三角形構成的&#xff0c;所以World Position Offset&#xff0c;只會從中間這條線折疊 所有材質 這里前幾篇博客有說這種邏輯&#xff0c;就是做一個對稱的漸變數值 這里用粒子的A值來做樹葉折疊的程度&#xff0c;當然你也可以用Dynamic Param 這樣就可以讓…

Android 11.0 長按按鍵切換SIM卡默認移動數據

Android 11.0 長按按鍵切換SIM卡默認移動數據 近來收到客戶需求想要通過長按按鍵實現切換SIM卡默認移動數據的功能&#xff0c;該功能主要通過長按按鍵發送廣播來實現&#xff0c;具體修改參照如下&#xff1a; 首先創建廣播&#xff0c;具體修改參照如下&#xff1a; /vend…

麒麟KYLINOS上刪除多余有線連接

原文鏈接&#xff1a;麒麟KYLINOS上刪除多余網絡有線連接 hello&#xff0c;大家好啊&#xff0c;今天我要給大家介紹的是在麒麟KYLINOS操作系統中&#xff0c;如何刪除通過Parallels Desktop虛擬機安裝時產生的多余有線連接。在使用Parallels Desktop虛擬機安裝麒麟桌面操作系…

C/C++ 題目:給定字符串s1和s2,判斷s1是否是s2的子序列

判斷子序列一個字符串是否是另一個字符串的子序列 解釋&#xff1a;字符串的一個子序列是原始字符串刪除一些&#xff08;也可以不刪除&#xff09;字符&#xff0c;不改變剩余字符相對位置形成的新字符串。 如&#xff0c;"ace"是"abcde"的一個子序…