商業競爭 三分 揹包

2022-05-01 17:03:07 字數 1537 閱讀 4708

個片段需要佔據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)

,依次描述每個廣告片段。

對於每組資料輸出一行乙個整數,即該公司按照最優策略投放廣告的總收益的最小可能值。

1

3 5 1 5

-3 5 2

-2 2 3

2 5 3

9

不會做 參考了大佬

很顯然 如果知道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;

}

view code

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位小數 四捨五入 ...