刪數問題

来源:https://www.cnblogs.com/momotrace/archive/2023/08/28/nonumproblem.html
-Advertisement-
Play Games

## 問題描述 現有$n$個正整數組成的序列$a$,從中刪除一個數,得分是其本身同左、右相鄰的數的乘積, 然後再在剩餘的整數中繼續刪除,註意**序列兩端的數字a1和an是不能刪除的**,求這樣刪除$n-2$個整數後的最大得分。 例如有四個數$3 、4、5、6$,按照先$4$後$5$的刪除順序,其得分 ...


問題描述

現有\(n\)個正整數組成的序列\(a\),從中刪除一個數,得分是其本身同左、右相鄰的數的乘積,
然後再在剩餘的整數中繼續刪除,註意序列兩端的數字a1和an是不能刪除的,求這樣刪除\(n-2\)個整數後的最大得分。

例如有四個數\(3 、4、5、6\),按照先\(4\)\(5\)的刪除順序,其得分為\(345+356=150\)
按照先\(5\)\(4\)的刪除順序,其得分為\(456+346=192\),因此最大得分為\(192\)

輸入格式

第一行一個整數\(n\)

接下來\(n\)個正整數表示序列\(a\)

輸出格式

一個正整數表示刪除\(n-2\)個整數後的最大得分

樣例

樣例輸入1

4
3 4 5 6

樣例輸出1

192

樣例輸入2

5
3 6 7 8 2

樣例輸出2

528

解析

問題分析

一個典型的區間動規。

狀態:
\(dp[i][j]\)表示第\(i\)個數字到第\(j\)個數字,假設最後刪掉\(k\)個數得到的結果最大

狀態轉移方程:

\[dp[i][j]=dp[i][k]+dp[k][j]+a[i]×a[k]×a[j]; \]

對於第\(i\)個物品到第\(j\)個物品,假設最後刪掉\(k\)得到的結果最大,那麼最後一次刪除時,得到的分數就是 \(a[i] × a[k] × a[j]\)。那麼總的得分就是需要加上之前刪掉\(k\)的左右兩邊除了\(i,j\)之外所有數的和,即\(dp[i][j]\) 的兩個子問題,分別是\(dp[i][k]\)\(dp[k][j]\)。由此便可得出上面所寫的狀態轉移方程

代碼

C++

#include <bits/stdc++.h>
using namespace std;

int a[1010];//用來保存序列 
int dp[1010][1010];//i、j用來保存刪除第i個數到第j個數所得到的最優值 
int main()
{
	int n;
	cin >> n;
	for(int i=1;i<=n;i++)
	{
		cin >> a[i];
	}
	for(int r=3;r<=n;r++)
	{
		for(int i=1;;i++)
		{
			int j=i+r-1;
			for(int k=i+1;k<=j-1;k++)
			{
				dp[i][j]=max(dp[i][j],dp[i][k]+dp[k][j]+a[i]*a[k]*a[j]);
			}
			if(j>=n) 
			{
				break;
			}
		}
	} 
	cout << dp[1][n];
	return 0;
} 

本文來自小默的博客,轉載請註明原文鏈接:https://www.cnblogs.com/momotrace/p/nonumproblem.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Printf() 函數可以使用多種格式化動詞對輸出進行格式化。下麵是可以與所有數據類型一起使用的一些通用格式化動詞: **通用格式化動詞:** 以下動詞適用於所有數據類型: |動詞|描述| |-|-| |`%v`|以預設格式列印值| |`%#v`|以 Go 語法格式列印值| |`%T`|列印值的類型 ...
  • `pandas`小技巧系列是介紹的是使用`pandas`分析數據時,最常用的一些操作技巧。 具體包括: 1. [創建測試數據](https://www.cnblogs.com/wang_yb/p/17552748.html) 學習pandas的過程中,為了嘗試pandas提供的各類功能強大的函數,常 ...
  • ## 1. 什麼是WebSocket? WebSocket 是一種在單個 TCP 連接上進行全雙工通信的協議,它允許在瀏覽器和伺服器之間進行實時的、雙向的通信。相對於傳統的基於請求和響應的 HTTP 協議,WebSocket 提供了一種更有效、更實時的通信方式,適用於需要實時更新、實時通知和實時交互 ...
  • 來源:toutiao.com/article/7234104886726705716 ## 1.前言 我們的生產環境基本上都部署在雲伺服器上,例如應用伺服器、MySQL伺服器等。如果MySQL伺服器直接暴露在公網,就會存在很大的風險,為了保證數據安全,MySQL伺服器的埠是不對外開放的。 好巧不巧 ...
  • 你的Java服務是如何監控的呢? 1.Null:監控?什麼監控?我一個寫代碼的服務掛了跟我有什麼關係? 2.命令行:服務掛了?記憶體泄漏?jstat jmap jcmd,還好不是我寫的 3.擼代碼:Java採集JVM/伺服器資源信息 -> Prometheus -> Grafana,請允許我對業務代碼 ...
  • 正式使用官方的Java API Client操作ES之前,將與之有關的重要知識點先做一輪串講,後面開始編碼時,疑點已掃清,可以愉快而順暢的實現業務功能 ...
  • 來源:https://www.toutiao.com/article/6697540366528152077/ ## 前言 有時候我們需要知道線上的**redis的使用情況**,尤其需要知道一些**首碼的key值**,讓我們怎麼去查看呢?今天給大家分享一個小知識點! ## 事故產生 因為我們的用戶* ...
  • # The difference beteen two way 總所周知,Java實現多線程有兩種方式,分別是繼承Thread類和實現Runable介面,那麼它們的區別是什麼? **繼承 Thread 類:** 通過繼承 Thread 類,你可以創建一個直接表示線程的類。你可以覆蓋 Thread 類 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...