【羊圈——狀壓 + DP / 記憶化搜索DP】

題目

一般DP代碼(注意,這里只能向外推(起始狀態是f(1,0),不能向內推(不然會導致之前的羊圈被割裂))

#include <bits/stdc++.h>
using namespace std;const int MAX_N = 210;
const int MAX_M = 16;int n, m;
double p[MAX_N];
int l[MAX_M];
double dp[MAX_N][1 << MAX_M];int main() {cin >> m >> n;for (int i = 1; i <= m; i++) cin >> l[i];for (int i = 1; i <= n; i++) cin >> p[i];int mask = 1 << m;for (int i = 0; i <= n + 1; i++) {for (int j = 0; j < mask; j++) {dp[i][j] = 1e18;}}dp[1][0] = 0;for (int u = 1; u <= n; u++) {for (int s = 0; s < mask; s++) {if (dp[u][s] == 1e18) continue;// 不覆蓋當前羊uif (u + 1 <= n + 1) {dp[u + 1][s] = min(dp[u + 1][s], dp[u][s] + p[u]);}// 嘗試用未使用的羊圈i覆蓋for (int i = 1; i <= m; i++) {if (!(s & (1 << (i - 1))) && u + l[i] - 1 <= n) {int new_s = s | (1 << (i - 1));dp[u + l[i]][new_s] = min(dp[u + l[i]][new_s], dp[u][s]);}}}}double ans = 1e18;for (int s = 0; s < mask; s++) {ans = min(ans, dp[n + 1][s]);}printf("%.2lf\n", ans);return 0;
}

記憶化搜索DP代碼

#include <bits/stdc++.h>
using namespace std;
using db = double;int n, m;
db p[210];
int w[20];
db dp[210][(1 << 15) + 10];db f(int u, int s)
{if(u >= n+1) return 0;if(dp[u][s] != -1) return dp[u][s];db ret = 1e18;//不用,狀態不變,但是值要增加(這里的值指的是逃跑期望)ret = p[u] + f(u+1, s);//用for(int i = 1; i <= m; i++){if(!(s & (1 << (i-1))) && u + w[i] - 1 <= n){ret = min(ret, f(u+w[i], s | (1 << (i-1))));}}return dp[u][s] = ret;
}
int main()
{cin >> m >> n;for(int i = 1; i <= m; i++)cin >> w[i];for(int i = 1; i <= n; i++)cin >> p[i];for(int i = 1; i <= n; i++)	for(int j = 0; j < 1 << m; j++)dp[i][j] = -1;printf("%.2lf", f(1, 0));
}

感想

另外勘誤

這題很多解法都是沒看到“最多”嗎

為什么要加這個限制?

#include <bits/stdc++.h>
using namespace std;
using db = double;int n, m;
db p[210];
int w[20];
db dp[210][(1 << 15) + 10];db f(int u, int s)
{if(u >= n+1) return 0;if(dp[u][s] != -1) return dp[u][s];db ret = 1e18;//不用,狀態不變,但是值要增加(這里的值指的是逃跑期望)ret = p[u] + f(u+1, s);//用for(int i = 1; i <= m; i++){if(!(s & (1 << (i-1)))){ret = min(ret, f(u+w[i], s | (1 << (i-1))));}}return dp[u][s] = ret;
}
int main()
{cin >> m >> n;for(int i = 1; i <= m; i++)cin >> w[i];for(int i = 1; i <= n; i++)cin >> p[i];for(int i = 1; i <= n; i++)	for(int j = 0; j < 1 << m; j++)dp[i][j] = -1;printf("%.2lf", f(1, 0));
}

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

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

相關文章

講解Mysql InnoDB的MVCC

1. 定義 MVCC是多版本并發控制&#xff08;Multi - Version Concurrency Control&#xff09;的縮寫。它是InnoDB存儲引擎實現高并發控制的一種機制。在數據庫系統中&#xff0c;多個事務可能會同時對數據進行讀寫操作&#xff0c;而MVCC通過為數據行保存多個版本來解決并發事務…

ZeroMQ Sockets介紹及應用示例

1. 概念解釋 ZeroMQ Sockets提供了一種類標準套接字&#xff08;socket-like&#xff09;的 API&#xff0c;是消息導向的通信機制&#xff0c;基于 TCP/UDP 等傳輸層協議&#xff0c;但封裝了底層細節&#xff08;如連接管理、消息路由、緩沖區等&#xff09;&#xff0c;提供…

語音合成之十五 語音合成(TTS)分句生成拼接時的響度一致性問題:現狀、成因與對策

語音合成&#xff08;TTS&#xff09;分句生成拼接時的響度一致性問題&#xff1a;現狀、成因與對策 引言&#xff1a;分段式文本轉語音中的響度一致性挑戰業界對響度差異問題的認知拼接語音片段中響度變化的根本原因分段拼接的固有挑戰各片段預測韻律特征的差異文本特征和模型…

Android中Binder驅動作用?

Binder驅動的作用與核心功能 Binder驅動是Android系統中實現進程間通信&#xff08;IPC&#xff09;的核心底層組件&#xff0c;它工作于Linux內核層&#xff0c;負責管理跨進程通信的建立、數據傳輸、資源同步等關鍵任務。以下是其核心作用及實現細節&#xff1a; 1. ??進程…

網絡學習-TCP協議(七)

一、TCP協議 TCP&#xff08;Transmission Control Protocol&#xff0c;傳輸控制協議&#xff09;是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。 1、三次握手 客戶端&#xff1a; 1、先發起連接&#xff0c;發送SYN置1&#xff0c;seqnum12345(隨機值)----半連接…

【Python 基礎與實戰】從基礎語法到項目應用的全流程解析

&#xff08;1&#xff09;列表和元組的區別是什么?如何從列表創建元組?如何從元組創建列表? 列表和元組的區別&#xff1a; 可變性&#xff1a;列表是可變的&#xff0c;即可以對列表進行元素的增、刪、改操作。例如&#xff0c;可以使用append()方法添加元素&#xff0c;r…

Docker部署Zookeeper集群

簡介 ZooKeeper 是一個開源的分布式協調服務&#xff0c;由 Apache 軟件基金會開發和維護。它主要用于管理和協調分布式系統中的多個節點&#xff0c;以解決分布式環境下的常見問題&#xff0c;如配置管理、服務發現、分布式鎖等。ZooKeeper 提供了一種可靠的機制&#xff0c;…

【學習筆記】Sophus (Python) 使用文檔

以下是一份針對 Sophus 庫的 Python 使用文檔&#xff0c;涵蓋基礎概念、安裝方法、核心功能及代碼示例。內容圍繞 SO3&#xff08;3D旋轉群&#xff09;和 SE3&#xff08;3D剛體變換群&#xff09;展開&#xff0c;適合機器人學、SLAM、三維幾何等領域。 Sophus (Python) 使用…

計算機圖形學:(三)MVP變換擴展

Three.js WebGL允許把JavaScript和OpenGL 結合在一起運用&#xff0c;但使用WebGL原生的API來寫3D程序非常的復雜&#xff0c;同時需要相對較多的數學知識&#xff0c;對于前端開發者來說學習成本非常高。 Three.js是基于webGL的封裝的一個易于使用且輕量級的3D庫&#xff0c;T…

MySQL數據庫操作合集

一、SQL通用語法 ①SQL語句可以單行或多行書寫&#xff0c;以分號結尾。 ②SQL語句可以使用空格/縮進來增強語句可讀性。 ③MySQL數據庫的SQL語句不區分大小寫&#xff0c;關鍵字建議使用大寫。 ④注釋&#xff1a; 單行注釋&#xff1a; -- 注釋內容 或 # 注釋內容&#…

傳統工程項目管理與業財一體化管理的區別?

在工程項目管理領域&#xff0c;傳統管理模式與新興的業財一體化管理模式正在形成鮮明對比。隨著數字化轉型的加速&#xff0c;工程行業對高效、透明、協同的管理需求日益迫切。傳統工程項目管理依賴人工操作、分散系統和分模塊管理&#xff0c;難以應對復雜項目的全生命周期需…

敦煌網測評從環境搭建到風控應對,精細化運營打造安全測評體系

自養號測評&#xff0c;搶占流量為快速提升產品權重和銷量&#xff0c;很多賣家常采用自己養號補單測評的方式&#xff0c;技術搭建需要很多要素 一、硬件參數的關聯性 在我們使用設備進行注冊或操作賬號的過程中&#xff0c;系統會記錄下大量的系統與網絡參數&#xff0c;其中…

redis Pub/Sub 簡介 -16 (PUBLISH、SUBSCRIBE、PSUBSCRIBE)

Redis Pub/Sub 簡介&#xff1a;PUBLISH、SUBSCRIBE、PSUBSCRIBE Redis Pub/Sub 是一種強大的消息傳遞范例&#xff0c;可在應用程序的不同部分之間實現實時通信。它是構建可擴展和響應式系統的基石&#xff0c;允許組件在沒有直接依賴的情況下進行交互。本章將全面介紹 Redis…

JavaSE核心知識點03高級特性03-01(集合框架)

&#x1f91f;致敬讀者 &#x1f7e9;感謝閱讀&#x1f7e6;笑口常開&#x1f7ea;生日快樂?早點睡覺 &#x1f4d8;博主相關 &#x1f7e7;博主信息&#x1f7e8;博客首頁&#x1f7eb;專欄推薦&#x1f7e5;活動信息 文章目錄 JavaSE核心知識點03高級特性03-01&#xff0…

日志分析-IIS日志分析

環境準備 https://xj.edisec.net/challenges/115 題目要求 windows系統中才有的IIS服務 既然是windows平臺&#xff0c;當然需要rdp登錄&#xff0c;在ssh登錄失敗 解題過程 phpstudy--2018站點日志.(.log文件)所在路徑&#xff0c;提供絕對路徑 Windows服務的日志一般有固定…

一、web安全基礎入門

1、Windows命令 文件和目錄操作 dir&#xff1a;列出當前目錄下的文件和子目錄。cd&#xff1a;切換目錄&#xff0c;例如 cd C:\Users 切換到C盤的Users目錄。md 或 mkdir&#xff1a;創建新目錄&#xff0c;如 md testdir。rd 或 rmdir&#xff1a;刪除空目錄&#xff0c;例…

動態規劃應用場景 + 代表題目清單(模板加上套路加上題單)

1. 序列型DP&#xff08;Sequence DP&#xff09; ? 應用場景 單個或多個序列&#xff08;數組/字符串&#xff09;&#xff0c;求最優子結構。 常見問題&#xff1a;最長遞增子序列、最長公共子序列、回文子序列。 &#x1f9e0; 套路總結 單序列&#xff1a;dp[i] max(…

Linux iSCSI存儲共享實驗指南

實驗介紹 1、在Linux平臺上通過iSCSI協議實現IP-SAN存儲共享 2、掌握存儲導出(export)和存儲導入(import)的配置方法 3、學習iSCSI存儲的發現、連接、斷開和管理操作 1、實驗環境 兩臺同網段的Linux虛擬機&#xff08;無需物理交換機&#xff09; 操作系統&#xff1a;Lin…

從 Docker 到 runC

從 Docker 到 runC:容器底層原理詳解 目錄 1. Docker 與 runC 的關系 2. Docker 的核心組件 3. runC 的核心功能 4. 實戰示例:從 Docker 到 runC 4.1 示例場景:運行一個簡單容器 4.2 Docker 底層調用 runC 的流程 4.3 查看 runC 的調用 4.4 直接調用 runC 創建容器 …

使用Python在PowerPoint中插入形狀(Shape)

在進行演示文稿設計時&#xff0c;形狀&#xff08;Shape&#xff09;不僅可以增強視覺效果&#xff0c;還可以用于展示流程圖、標注、數據圖示等。借助Python&#xff0c;我們可以通過代碼快速批量地在PPT中添加各種形狀&#xff0c;提升設計效率。本文將介紹如何使用Python向…