個片段需要佔據wi
秒的檔期,在第k
天這個片段給這家公司帶來的淨利潤為k×ai+bi
之間選擇乙個正整數k
,在第k
秒的廣告,所以當檔期不足時,他們也會酌情捨棄一些廣告。
商業競爭是殘酷的,對方賺的越多,你賺的就越少。請選擇乙個最合適的k
,使得該公司按照最優策略投放廣告的總收益最小。
第一行包含乙個正整數t(1≤t≤10)
,表示測試資料的組數。
每組資料第一行包含四個正整數n,m,l,r(1≤n,m≤500,1≤l≤r≤106)
,分別表示廣告片段的數量、檔期的限制以及選擇的範圍。
接下來n
行,每行三個整數ai,bi,wi(−106≤ai≤106,−1012≤bi≤1012,1≤wi≤m)
,依次描述每個廣告片段。
對於每組資料輸出一行乙個整數,即該公司按照最優策略投放廣告的總收益的最小可能值。
13 5 1 5
-3 5 2
-2 2 3
2 5 3
9view code不會做 參考了大佬
很顯然 如果知道k那麼就是乙個揹包問題 列舉k的話肯定是超時的
可以在座標軸做圖 x代表k 最優解是最上面那一段 很明顯是乙個凹函式
求凹函式的最值用到三分查詢法
現在規定一下二分或者三分查詢
while(l+1
#includeusing
namespace
std;
//input
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repp(i,a,b) for(int i=(a);i>=(b);i--)
#define ri(n) scanf("%d",&(n))
#define rii(n,m) scanf("%d%d",&n,&m);
#define riii(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define rs(s) scanf("%s",s);
#define ll long long
#define inf 0x3f3f3f3f
#define rep(i,n) for(int i=0;i
#define clr(a,v) memset(a,v,sizeof a)
/////////////////////////////////
/#define n 500+5
intn,m,l,r;
ll a[n];
ll b[n];
ll w[n];
ll v[n];
ll bag(
intt)
intmain()
printf(
"%lld\n
",bag(l));
}return0;
}
hdu 3400 Line belt 三分套三分)
題意 在乙個二維空間中給出兩條線段ab,cd,線段ab,cd上的運動速度分別為p,q。在這兩條線段之外的空間上運動的速度為r。求從a到d的最短時間。思路 ps 在這種求解方法中,中間運用了比較多的除法,導致精度損失,所以再開方前加乙個eps,防止開方後的值比真實值小。include include ...
三分 三分求極值 HihoCoder 1142
描述 在之前的幾周中我們了解到二分法作為分治中最常見的方法,適用於單調函式,逼近求解某點的值。但當函式是凸形函式時,二分法就無法適用,這時就需要用到三分法。從三分法的名字中我們可以猜到,三分法是對於需要逼近的區間做三等分 week40 2.png 我們發現lm這個點比rm要低,那麼我們要找的最小點一...
HIHOCODER 1142 三分 三分求極值
這一次我們就簡單一點了,題目在此 在直角座標系中有一條拋物線y ax 2 bx c和乙個點p x,y 求點p到拋物線的最短距離d。第1行 5個整數a,b,c,x,y。前三個數構成拋物線的引數,後兩個數x,y表示p點座標。200 a,b,c,x,y 200 第1行 1個實數d,保留3位小數 四捨五入 ...