貪心(基礎算法)--- 牛馬耍雜技

耍雜技的牛

農民約翰的N頭奶牛(編號為1…N)計劃逃跑并加入馬戲團,為此它們決定練習表演雜技。

奶牛們不是非常有創意,只提出了一個雜技表演:

疊羅漢,表演時,奶牛們站在彼此的身上,形成一個高高的垂直堆疊。

奶牛們正在試圖找到自己在這個堆疊中應該所處的位置順序。

這N頭奶牛中的每一頭都有著自己的重量Wi以及自己的強壯程度Si。

一頭牛只撐不住的可能性取決于它頭上所有牛的總重量(不包括它自己)減去它的身體強壯程度的值,現在稱該數值為風險值,風險值越大,這只牛撐不住的可能性越高。

您的任務是確定奶牛的排序,使得所有奶牛的風險值中的最大值盡可能的小。

輸入格式 第一行輸入整數N,表示奶牛數量。

接下來N行,每行輸入兩個整數,表示牛的重量和強壯程度,第i行表示第i頭牛的重量Wi以及它的強壯程度Si。

輸出格式 輸出一個整數,表示最大風險值的最小可能值。

數據范圍

1≤N≤50000, 1≤Wi≤10,000, 1≤Si≤1,000,000,000

輸入樣例:

3 10 3 2 5 3 3

輸出樣例:

2

思路

(貪心)O(nlogn)

與國王游戲的貪心策略相似, 我們先分析

每頭牛的危險值 = 他前面牛的w(重量值)之和 - 自身的s(強壯值)

要使每頭牛的危險值最小,根據貪心思想:

  • 自身w值越大應該放到底部(即減小上述式中的被減數)
  • 自身s值越大應該放到底部(即增大上述式中的減數)

所以先 假設出一種貪心做法 每頭牛的(w + s)值越大應該排在后面,即升序排序(題見多了可能就會有這種題感)。

接下來進行圖解證明

image-20240304111758157

交換前后其他牛的危險值不變

  • i之前的牛并不涉及牛i與i+1的重量值,
  • i+1之后的牛只涉及到牛i與i+1重量值的和,

所以分析交換前后最大的危險值即可。

image-20240304112626399

我們只需要找到 :交換前這倆牛馬的危險值的最大值 < 交換后該牛馬的危險值的最大值的條件 ,只要證明在該條件下這四個值的最大值如果是交換后的即可。

現在我們來比較一下

  • Wa -S(i + 1)< Wa + W(i)- S(i+1)
  • Wa +W(i+ 1) - S(i) > Wa - S(i)

排除倆個,再比較 Wa +W(i+ 1) - S(i) 和Wa + W(i)- S(i+1)

也就是比較W(i) - S(i + 1)(交換前 ) 和W(i + 1) - S(i)(交換后)

如果交換前危險值 > 交換后危險值

W(i) - S(i + 1)(交換前 ) > W(i + 1) - S(i)(交換后)

也就是 W(i) + S(i) > W(i + 1) + S (i + 1)

如果交換前危險值 < 交換后危險值

W(i) - S(i + 1)(交換前 ) < W(i + 1) - S(i)(交換后)

也就是 W(i) + S(i) < W(i + 1) + S (i + 1)

所以得到做法: 按每頭牛的 w + s 進行排序,

當存在逆序時就進行交換(即升序排序),

import java.util.*;
?
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();Pair[] pairs = new Pair[n];for(int i = 0; i < n; i ++) {int w = sc.nextInt();int s = sc.nextInt();pairs[i] = new Pair(w, s);}Arrays.sort(pairs, 0, n);int max = Integer.MIN_VALUE;int w = 0;for(int i = 0; i < n; i ++) {int x = w - pairs[i].v;if(x > max) max = x;w += pairs[i].w; ? ? ? ? ? ?}System.out.println(max);}
}
?
?
class Pair implements Comparable<Pair>{
?int w;int v;public Pair(int w, int v) {this.w = w;this.v = v;}public int compareTo(Pair o){return Integer.compare(w + v, o.w + o.v);}}
?

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

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

相關文章

@Resource和@Autowired區別

在Java Spring框架中&#xff0c;Resource和Autowired注解都用于依賴注入&#xff0c;但它們之間有一些區別&#xff1a; 來源: Autowired是Spring特定的注解&#xff0c;它通過類型匹配來進行自動裝配。Resource是Java EE&#xff08;javax.annotation.Resource&#xff09;提…

【MATLAB】語音信號識別與處理:T1小波濾波算法去噪及譜相減算法呈現頻譜

1 基本定義 T1小波濾波算法是一種基于小波變換的信號去噪算法。它可以有效地去除信號中的噪聲&#xff0c;并保留信號的主要特征。該算法的主要思想是將信號分解為多個不同尺度的小波系數&#xff0c;然后通過對小波系數進行閾值處理來去除噪聲。 具體來說&#xff0c;T1小波濾…

服務器數據恢復-服務器RAID5上層XFS文件系統分區數據恢復案例

服務器數據恢復環境&#xff1a; MD1200磁盤柜中的磁盤通過RAID卡創建了一組RAID5陣列&#xff0c;分配了一個LUN。在Linux操作系統層面對該LUN進行了分區&#xff0c;劃分sdc1和sdc2兩個分區&#xff0c;通過LVM擴容的方式將sdc1分區加入到了root_lv中&#xff1b;sdc2分區格式…

飛槳(PaddlePaddle)Tensor使用教程

文章目錄 飛槳&#xff08;PaddlePaddle&#xff09;Tensor使用教程1. 安裝飛槳2. 創建Tensor3. Tensor的基本屬性4. Tensor的操作5. Tensor的廣播機制6. Tensor與Numpy數組的轉換7. 結論 飛槳&#xff08;PaddlePaddle&#xff09;Tensor使用教程 1. 安裝飛槳 首先&#xff…

vue2+vxe-table的v3版本:設置vxe-table表格border顏色、單元格高度、斑馬線條紋顏色、表頭背景色和文字樣式

模板與樣式完整代碼 <vxe-table:data"tableData"height"auto"align"center"borderresizablestriperoundrow-id"id":row-config"{ isCurrent: true, isHover: true }":scroll-y"{ enabled: true, gt: 10 }":sho…

SSL證書驗證失敗怎么辦?常見SSL證書驗證失敗原因及解決辦法

網站與其訪問者建立信任的主要方式就是通過簽發SSL證書&#xff0c;因為SSL證書是由受信任的證書頒發機構&#xff08;CA&#xff09;在驗證某個網站真實性和可信任性之后才頒發的。但是&#xff0c;網站部署SSL證書后&#xff0c;偶爾會出現SSL證書驗證失敗而導致錯誤&#xf…

瞄準關基行業!Lockbit卷土重來,銀狐卷出新變種

Lockbit與銀狐木馬是亞信安全2023年重點關注的兩支勒索軟件家族。Lockbit可謂是2023年度最為活躍和猖獗的勒索軟件&#xff0c;受害者上千贖金破億&#xff0c;攻擊技能更是疊加buff不斷升級&#xff0c;在經歷國際聯合執法后在近期卷提重來。銀狐木馬則是2023年的“卷王”&…

跟隨機器人方法總結

文章目錄 基于目標檢測基于視覺跟蹤與自主導航的移動機器人目標跟隨系統[J]基于視覺的履帶車跟隨系統研究[D]基于人體骨架基于二維碼基于視覺的履帶車跟隨系統研究[D]基于目標檢測 基于視覺跟蹤與自主導航的移動機器人目標跟隨系統[J] 針對在移動機器人跟隨目標的過程中目標消…

短劇分銷系統開發,短劇爆火下的商業機遇

這幾年來&#xff0c;短劇市場一直保持著快速發展的步伐&#xff0c;在行業中掀起了了一股風潮。短劇被大眾當做“電子榨菜”&#xff0c;符合了當下人們的碎片化時間。節奏快、劇情緊湊的特點深受大眾的追捧&#xff0c;短劇的市場規模也超過了百億元。 在短劇的爆火下&#…

開發知識點-Ruby

Ruby https://m.runoob.com/ruby/ruby-installation-windows.htmlhttps://rubyinstaller.org/downloads/

題目 1454: 藍橋杯歷屆試題-螞蟻感冒

題目描述: 長100厘米的細長直桿子上有n只螞蟻。它們的頭有的朝左&#xff0c;有的朝右。 每只螞蟻都只能沿著桿子向前爬&#xff0c;速度是1厘米/秒。 當兩只螞蟻碰面時&#xff0c;它們會同時掉頭往相反的方向爬行。 這些螞蟻中&#xff0c;有1只螞蟻感冒了。并且在和其它螞蟻…

MySQL中DDL語句,會隱式地提交事務

DDL&#xff08;Data Definition Language&#xff09;語句&#xff0c;如CREATE TABLE、ALTER TABLE、DROP TABLE等&#xff0c;會隱式地提交事務&#xff0c;即使它們發生在BEGIN和ROLLBACK語句之間。這意味著一旦執行了DDL語句&#xff0c;之前的所有未提交的事務都會被自動…

Transformer——詞向量

詞向量 在自然語言處理任務中&#xff0c;模型的輸入大多為單個字或者詞。但是字詞都是自然語言的表述&#xff0c;對于以二進制為處理語言的計算機來說&#xff0c;其并不認識這個字詞。所以需要將字詞轉換為計算機認識的數據。 轉換的方法有很多&#xff0c;我們接下來將介…

【Matlab深度學習】詳解matlab深度學習進行時間序列預測

&#x1f517; 運行環境&#xff1a;Matlab &#x1f6a9; 撰寫作者&#xff1a;左手の明天 &#x1f947; 精選專欄&#xff1a;《python》 &#x1f525; 推薦專欄&#xff1a;《算法研究》 &#x1f510;#### 防偽水印——左手の明天 ####&#x1f510; &#x1f497; 大家…

bat文件的外部參數

bat執行時有兩種獲得參數的方法&#xff0c;一種是執行時在命令行中輸入&#xff0c;一種是運行時從鍵盤輸入。 從命令行輸入參數&#xff0c;使用兩個%中間包含數字表示&#xff0c;數字從1至9&#xff0c;命令行參數最多為9個。示例&#xff1a; echo off echo show %1%鍵盤…

力扣——盛最多水的容器

題目描述&#xff1a; 給定一個長度為 n 的整數數組 height 。有 n 條垂線&#xff0c;第 i 條線的兩個端點是 (i, 0) 和 (i, height[i]) 。 找出其中的兩條線&#xff0c;使得它們與 x 軸共同構成的容器可以容納最多的水。 返回容器可以儲存的最大水量。 說明&#xff1a;…

最短路徑(2.19)

目錄 1.網絡延遲時間 弗洛伊德算法 迪杰斯特拉算法 2. K 站中轉內最便宜的航班 3.從第一個節點出發到最后一個節點的受限路徑數 4.到達目的地的方案數 1.網絡延遲時間 有 n 個網絡節點&#xff0c;標記為 1 到 n。 給你一個列表 times&#xff0c;表示信號經過 有向 邊的…

day32貪心算法 part02

貪心系列的時候&#xff0c;題目和題目之間貌似沒有什么聯系,是真的就是沒什么聯系&#xff0c;因為貪心無套路,沒有個整體的貪心框架解決一系列問題&#xff0c;只能是接觸各種類型的題目鍛煉自己的貪心思維。貪心只是一類題的統稱&#xff0c;并沒有什么固定套路。 122. 買賣…

Android NDK底層BUG,記錄:connect、socket(AF_INET, SOCK_STREAM, 0) 等系統套接字接口函數崩潰問題。

在 Android NDK 之中&#xff0c;看上去調用 connect、socket 函數是不會崩潰的&#xff0c;但這是否定的&#xff0c;它在特定的情況下存在必定的崩潰的問題。 但是這種情況放到MACOS、LINUX、WINDOWS都不會崩潰&#xff0c;而它崩潰的點出現在操作系統底層。 人們需要參考這…

香橙派企業信用問題-勸一個是一個,別買!!!

1. 背景 香橙派推廣旗下AI PRO 開發板&#xff0c;在B站做直播&#xff0c;一場直播兩個直播間&#xff0c;分別抽取一名觀眾&#xff0c;宣傳是場場送AI PRO開發板&#xff01;&#xff01;&#xff01; 2. 收到獎品與宣傳不符合 3.咨詢群主&#xff1a;態度很傲慢&#xff0c…