【題目描述】
牧民 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 2using
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 一般二分答案解決的問題是最優...