U33405 紐約 (二分)

2022-05-23 17:00:08 字數 1132 閱讀 5221

【題目描述】

牧民 azone 需要多次往返於兩個草場之間運輸家當。為了順利轉場,azone 決定花費 w元辛巴威幣,購買一輛載重為 w的汽車。共有 n 件家具需要搬運,每件家具的重量為 wi​。azone 每次出發前,會搬若干件總重不超過 w的物品上車:出發前,車是空載的,azone 會選擇能搬上車的家具中最重的一件放上車(即該家具之前還未運走且放置該家具後汽車不會超載),然後在剩下的家具中繼續選擇一件能被搬走的最重的上車,持續裝車,直至剩下的家具都塞不上車。裝載完畢後,azone 會開車運走這些家具,卸在目的地,再駕空車返回繼續運送,直至轉場完畢。

azone 希望在運送次數不超過 r的情況下完成轉場,求 azone 最少需要購置價值多少的車。

【題目鏈結】

【演算法】

直接二分結果不一定是最優解,存在w時可行而w+1不可行的情況。但是若w可行則w+biase(偏置值》=max(w【i】))必定可行,所以先二分然後往前列舉max(w【i】)個。重點是為什麼二分結果不一定是最優解,因為題目當中採取的裝載策略(貪心策略:取盡可能重)並非最優策略(貪心成立的時候記得是坐船問題:乙個船最多坐兩個人,並且有載重限制,可以證明)。

【**——模擬貪心策略,對每乙個家具遍歷已經開出的裝載集合,若能裝則裝否則重新開乙個集合】

1 #include 2

using

namespace

std;

3int

n,r,i,l,j,r,ans;

4int a[2010],rec[2010];5

bool cmp(int a,int b)

6bool valid(int

cur)718

if(!flag) rec[++tot]=a[i];

19if(tot>r) return

false;20

}21return

true;22

}23intmain()

2434 ans=l;

35for(int i=1;i<=a[1]&&l-i>=a[1];i++)

36if(valid(l-i)) ans=l-i;

37 printf("

%d\n

",ans);

38return0;

39 }

二分貪心 U

題目要求 小鮑勃喜歡和他的磚塊一起玩。他將磚塊放在另一塊上,並建立不同高度的堆垛。看,我已經建了一堵牆!他告訴他的姐姐愛麗絲。呵呵,你應該把所有的堆疊都一樣高,然後你會有乙個真正的牆壁。她反駁道。經過一番考慮後,鮑勃看到她是對的。所以他開始重新排列磚塊,乙個接乙個,所有的堆疊都是相同的高度。但是,由...

1128 二分 二分查詢

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述nettle最近在玩 艦 因此nettle收集了很多很多的船 這裡我們假設nettle氪了很多金,開了無數個船位 去除掉重複的船之後,還剩下n 1 n 1,000,000 種不同的船。每一艘船有乙個稀有值,任意兩艘船的稀有...

二分(二分答案 二分搜尋)與單調性

經典二分搜尋是二分空間範圍。二分答案又叫二分猜值,是二分解的值空間。其實可以統一,普通的二分搜尋也是二分答案值域 下標空間,也是猜值。二分必須滿足單調性,最直觀的,二分搜尋只能在有序陣列上進行。單調性體現在,下標和元素值是單調的,也就是 if j i 有 a j a i 一般二分答案解決的問題是最優...