【洛谷P1417】烹調方案 題解

題目大意

一共有 nnn 件食材,每件食材有三個屬性,aia_iai?bib_ibi?cic_ici?,如果在 ttt 時刻完成第 iii 樣食材則得到 ai?t×bia_i-t\times b_iai??t×bi? 的美味指數,用第 iii 件食材做飯要花去 cic_ici? 的時間。
需要設計烹調方案使得在TTT的時間內美味指數最大并輸出。

數據范圍及約定

  • 對于 40%40\%40% 的數據 1≤n≤101 \le n \le 101n10
  • 對于 100%100\%100% 的數據 1≤n≤501 \le n \le 501n50

所有數字均小于 10510^5105

暴力想法

首先我們可以觀察到,若不考慮烹飪順序,或是已知順序的情況下,求解是很簡單的:只需要使用復雜度O(n^2)的01背包進行dp即可

(如果不知道01背包,強烈建議跳轉主頁學習)

注意到前40%數據的N很小,我們便可以直接暴力枚舉菜品的全排列,進行dp即可。

想明白后,我們稍加計算,就會發現:

超時辣!

時間復雜度O(n22n)O(n^22^n)O(n22n)過不了噠!(理論上超3e8次運算,數據很水就當我沒說)

正解

其實剛剛的想法已經比較接近正解了。我們來看看上面的做法能怎么優化。

對于后半部分,可以基本確定是沒有優化空間的——首先dp是必做,其次就算能將dp優化到O(nlogn)O(nlogn)O(nlogn)甚至O(n)O(n)O(n),大數據依舊是過不了的。

于是我們考慮如何排列烹飪順序

首先可以觀察到一個性質:如果交換相鄰兩個菜品的烹飪順序,對前后菜品產生的貢獻是沒有影響的,因為交換后此前烹飪的總時間不變!

也就是說,如果存在菜品A優于B(即先烹飪A價值更大)、B優于C,則一定有A優于C!

接下來我們開始推理每種菜品的應有順序。

假設有兩個相鄰的菜品序號為 i,ji,ji,j ,之前所用的總時間為TTT

根據題意可得,若先烹飪iii號菜品,得到的價值一共是:

w1=(ai?bi×(T+ci))+(aj?bj×(T+ci+cj))w_1=(a_i-b_i×(T+c_i))+(a_j-b_j×(T+c_i+c_j))w1?=(ai??bi?×(T+ci?))+(aj??bj?×(T+ci?+cj?))
=ai+aj?T×(bi+bj)?bi×ci?bj×ci?bj×cj=a_i+a_j-T×(b_i+b_j)-b_i×c_i-b_j×c_i-b_j×c_j=ai?+aj??T×(bi?+bj?)?bi?×ci??bj?×ci??bj?×cj?

若先烹飪jjj號菜品,得到的價值一共是:

w2=(aj?bj×(T+cj))+(ai?bi×(T+cj+ci))w_2=(a_j-b_j×(T+c_j))+(a_i-b_i×(T+c_j+c_i))w2?=(aj??bj?×(T+cj?))+(ai??bi?×(T+cj?+ci?))
=ai+aj?T×(bi+bj)?bi×ci?bi×cj?bj×cj=a_i+a_j-T×(b_i+b_j)-b_i×c_i-b_i×c_j-b_j×c_j=ai?+aj??T×(bi?+bj?)?bi?×ci??bi?×cj??bj?×cj?

顯然,若先烹飪iii號更優,則有w1>w2w_1>w_2w1?>w2?

帶入并化簡兩邊,可以得到 ?bj×ci>?bi×ci-b_j×c_i>-b_i×c_i?bj?×ci?>?bi?×ci?

即:若bj×ci<bi×cjb_j×c_i<b_i×c_jbj?×ci?<bi?×cj?,則先烹飪iii號菜品更優。

所以,我們可以先根據上述結論對數組排序,再做dp

時間復雜度O(nT)O(nT)O(nT)(畢竟nnn很小,排序時間可以不計)

AC代碼

#include<bits/stdc++.h>
using namespace std;
#define For(i, j, k) for(int i = j; i <= k; i++)
#define dFor(i, j, k)for(int i = j; i >= k; i--)
#define MaxN 55
#define int long longstruct Node{int a, b, c;bool operator<(const Node x) const{		//重載運算符,按之前的結論排序return c * x.b < b * x.c;}
}a[MaxN];
int T, n;
int f[MaxN][100005];signed main()
{cin >> T >> n;For(i, 1, n) cin >> a[i].a;For(i, 1, n) cin >> a[i].b;For(i, 1, n) cin >> a[i].c;sort(a+1, a+n+1);int ans = 0;For(i, 1, n){For(j, 1, T){				//01背包,雖然沒有降維優化awaf[i][j] = max(f[i][j], f[i-1][j]);if(j >= a[i].c){f[i][j] = max(f[i][j], f[i-1][j-a[i].c] + a[i].a-a[i].b*j);}ans = max(ans, f[i][j]);}}cout << ans << endl;return 0;
}

總結

思維難度相對較高,主要在于推理傳遞性和排序規則

類似的題目還有P1060國王游戲等,可以練習

最后,制作實在不易。如果你喜歡這篇文章,可以點個免費的關注和免費的贊

我們下期再見!

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

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

相關文章

vue svg實現一個環形進度條組件

svg實現一個環形進度條設計初衷&#xff1a;本來想直接使用element的進度條組件的&#xff0c;但是好多屬性都沒有辦法控制。 UI設計的圖如下&#xff0c;需要控制未完成和已完成的顏色&#xff0c;端點的形狀改為普通的butt 所以使用svg實現了一個環形進度條組件element組件設…

02 51單片機之LED閃爍

文章目錄1、單片機1-1、簡介1-2、應用場景2、51單片機2-1、背景2-2、主要品牌及其產品2-3、基本組成2-4、命名規則3、單片機內部結構3-1、單片機內部結構圖3-2、單片機內部結構3-3、單片機內部管腳圖3-4、單片機最小系統3-5、開發板介紹4、點亮LED4-1、新建工程4-1-1、創建工程…

Typecho博客集成算術驗證碼防御垃圾評論實戰指南

文章目錄 Typecho實現算術驗證碼防御機器人垃圾評論的完整方案 背景與問題分析 技術方案設計 系統架構 技術選型 核心實現步驟 1. 創建驗證碼生成函數 2. 修改評論表單模板 3. 添加AJAX刷新功能 4. 創建驗證碼刷新接口 5. 添加評論提交驗證 安全增強措施 1. 防止暴力破解 2. 增…

clonezilla 導出自動化恢復iso

clonezilla 下載及U盤工具下載 clonezilla rufus U盤寫入工具ventoy U盤工具downloaddownloaddownload clonezilla 備份&#xff0c;連貫上一篇文章參考 Choose Clonezilla live (VGA 800x600) Wait for it to complete Language selection Keyboard Settings Select Mode …

深度學習模型開發部署全流程:以YOLOv11目標檢測任務為例

深度學習模型開發部署全流程&#xff1a;以YOLOv11目標檢測任務為例 深度學習模型從開發到部署的完整流程包含需求分析、數據準備、模型訓練、模型優化、模型測試和部署運行六大核心環節。YOLOv11作為新一代目標檢測模型&#xff0c;不僅延續了YOLO系列的高效實時性能&#xff…

單片機(STM32-串口通信)

一、串口通信基礎概念串口通信&#xff08;Serial Communication&#xff09;是一種在計算機和外部設備之間進行數據傳輸的通信方式。它通過串行方式逐位傳輸數據&#xff0c;是最基本和常用的通信接口之一。主要特點1. 串行傳輸(1)數據按位順序傳輸&#xff0c;一次只能傳輸一…

Redis學習其三(訂閱發布,主從復制,哨兵模式)

文章目錄9.Redis訂閱與發布9.1發布訂閱命令9.2示例10.Redis主從復制10.1概念10.2環境配置10.3集群搭建&#xff08;一主二從配置&#xff09;10.4使用規則&原理11.哨兵模式11.1基本概念11.2工作原理11.3使用案例12.緩存穿透,雪崩&#xff08;待拓展&#xff09;12.1緩存穿透…

跨平臺 App 如何無痛遷移到鴻蒙系統?全流程實戰+Demo 教程

摘要 目前&#xff0c;隨著 HarmonyOS&#xff08;鴻蒙系統&#xff09;的快速發展&#xff0c;越來越多開發者和企業希望將已有的 Android、Flutter、React Native 等跨平臺應用遷移到鴻蒙生態中。鴻蒙不僅具備分布式能力、原生性能和統一的開發范式&#xff0c;還提供了豐富的…

智慧后廚檢測算法構建智能廚房防護網

智慧后廚檢測&#xff1a;構建安全潔凈廚房的智能解決方案背景&#xff1a;傳統后廚管理的痛點與智慧化需求餐飲行業后廚管理長期面臨操作規范難落實、安全隱患難察覺、衛生狀況難追溯等痛點。傳統人工巡檢效率低、覆蓋面有限&#xff0c;難以實現24小時無死角監管。例如&#…

LatentSync: 一鍵自動生成對嘴型的視頻

LatentSync是什么 字節跳動與北京交通大學聯合推出了全新的唇形同步框架 LatentSync&#xff0c;它基于音頻驅動的潛在擴散模型&#xff0c;跳過了傳統的3D建模或2D特征點提取&#xff0c;直接生成自然逼真的說話視頻。 LatentSync借助Stable Diffusion強大的圖像生成能力&am…

在斷網情況下,網線直接連接 Windows 筆記本和 Ubuntu 服務器進行數據傳輸

在斷網情況下&#xff0c;通過網線直接連接 Windows 筆記本 和 Ubuntu 服務器上的容器 進行數據傳輸&#xff0c;可以按照以下步驟操作&#xff1a;1. 物理連接 使用網線直連&#xff1a;用一根 普通網線&#xff08;直通線&#xff09; 連接 Windows 筆記本和 Ubuntu 服務器的…

機器學習17-Mamba

深度學習之 Mamba 學習筆記 一、Mamba 的背景與意義 在深度學習領域&#xff0c;序列建模是一項核心任務&#xff0c;像自然語言處理、語音識別和視頻分析等領域&#xff0c;都要求模型能有效捕捉長序列里的依賴關系。之前&#xff0c;Transformer 憑借強大的注意力機制成為序列…

Java實現word、pdf轉html保留格式

一、word轉html 依賴&#xff1a; <properties><poi.version>5.2.3</poi.version><xhtml.version>2.0.4</xhtml.version> </properties><!--word轉html--> <dependency><groupId>org.apache.poi</groupId><a…

基于51單片機和16X16點陣屏、矩陣按鍵的小游戲《俄羅斯方塊》

目錄系列文章目錄前言一、效果展示二、原理分析三、各模塊代碼1、16X16點陣屏&#xff08;MAX7219驅動&#xff09;2、矩陣按鍵3、定時器0四、主函數總結系列文章目錄 前言 《俄羅斯方塊》&#xff0c;一款經典的、懷舊的小游戲&#xff0c;單片機入門必寫程序。 有兩個版本&…

Stable Diffusion Windows本地部署超詳細教程(手動+自動+整合包三種方式)

Stable Diffusion Windows 本地部署超詳細教程 (手動 自動 整合包三種方式) 一、引言 我們可以通過官方網站 Stability AI&#xff0c;以及 Dream Studio、Replicate、Playground AI 、Baseten 等網站在線體驗 Stable Diffusion 的巨大威力。相比于集成在網絡平臺的 SD 或者…

sqli-labs靶場通關筆記:第29-31關 HTTP參數污染

第29關 HTTP參數污染本關設置了web應用防火墻&#xff08;WAF&#xff09;&#xff0c;利用白名單保護機制來檢測和攔截惡意請求。看本關源代碼。<?php //including the Mysql connect parameters. include("../sql-connections/sql-connect.php"); //disable er…

Vuex 基本概念

參照官網整理總結vuex語法。 計劃日期&#xff1a; Vuex基礎部分&#xff1a;2022年2月20日——2022年2月28日 Vuex源碼相關實踐&#xff1a;待定 Vuex拓展&#xff1a;待定 寫完后&#xff0c;會發到倉庫地址&#xff1a;待定 Vuex 是一個專為 Vue.js 應用程序開發的狀態管理模…

深入理解Linux文件操作:stdin/stdout/stderr與C語言文件函數全解析

目錄 一、stdin、stdout 和 stderr 詳解 二、文件打開方式 三、C語言文件操作函數詳解 1、文件操作概述 2、文件操作函數分類表 1. 文件打開與關閉 2. 字符讀寫函數 3. 字符串讀寫函數 4. 格式化讀寫函數 5. 二進制讀寫函數 6. 文件定位函數 7. 文件狀態與錯誤檢測…

【自用】JavaSE--集合框架(一)--Collection集合體系

概述之前學的ArrayList就是集合的一種&#xff0c;是一種容器&#xff0c;可以往里面存東西&#xff0c;大小可變Collection集合體系Collection的常用方法以后Collection體系的集合都可以用下圖的方法注意toArray方法的數組類型是Object&#xff0c;這樣就可以接收任意類型的數…

電腦視頻常用幾種接口

傳輸信號類型 DP&#xff08;DisplayPort&#xff09;主要用于傳輸數字視頻和音頻信號&#xff0c;支持高分辨率和高刷新率。HDMI&#xff08;High-Definition Multimedia Interface&#xff09;同樣傳輸數字音視頻信號&#xff0c;但更偏向消費電子領域&#xff0c;如電視、游…