NOIP2016提高A組模擬8 14 瘋狂的火神

2021-07-16 15:50:48 字數 1391 閱讀 1375

火神為了檢驗zone的力量,他決定單挑n個人。

由於火神訓練時間有限,最多只有t分鐘,所以他可以選擇一部分人來單挑,由於有麗子的幫助,他得到了每個人特定的價值,每個人的價值由乙個三元組(a,b,c)組成,表示如果火神在第x分鐘單挑這個人(x指單挑完這個人的時間),他就會得到a-b*x的經驗值,並且他需要c分鐘來打倒這個人。

現在火神想知道,他最多可以得到多少經驗值,由於火神本來就很笨,進入zone的瘋狂的火神就更笨了,所以他希望你來幫他計算出他最多可以得到多少經驗值。

第一行乙個正整數t,表示資料組數

對於每組資料,第一行為兩個正整數n和t,表示跟火神單挑的人的個數和火神的訓練時間。

下面n行,每行三個正整數ai,bi,ci,表示每個人的價值,含義見題目。

對於每組資料輸出一行乙個整數表示火神最多能得到多少經驗值

1 4 10

110 5 9

30 2 1

80 4 8

50 3 2

對於 20%的資料1≤n≤10

對於50%的資料1≤n≤18

對於100%的資料1≤n≤1000,1≤t≤3000,1≤ci≤t,ai≤10^6

保證n>200的資料組數不超過五組,其他的資料組數不超過10組

保證每個人貢獻的經驗值到訓練結束都不會變成負數

假設i,j連續,那麼它們交換順序的貢獻與它們之前和之後都無關且無影響

那麼如果i在前比j在前優,則 a[

i]−b

[i]∗

(k+c

[i])

+a[j

]−b[

j]∗(

k+c[

j]+c

[i])

i]−b

[i]∗

(k+c

[j])

+a[j

]−b[

j]∗(

k+c[

i]+c

[j])

然後自己yy簡化以後

發現答案只與b[

i]c[

i]有關,那就以這個為關鍵字排序,做揹包問題即可

#include

#include

#include

#define fo(i,a,b) for(int i=a;i<=b;i++)

#define db double

using

namespace

std;

int n,t,ans=0,ac,f[5000];

struct note;

note a[1010];

bool cnt(note a,note b)

int main()

}printf("%d\n",ans);

}}

NOIP2016提高組模擬 積木

比賽的時候用了個神奇的小暴力,本來打算拿40分,沒想到暴力出奇蹟,隨機資料下表現優良,居然碾過去了。暴力方法不講,只貼 僅供對拍。正解顯然要用狀態壓縮 看資料範圍 設fs i,0 1 2 s表示當前已選擇的積木集合,i表示在最上方的積木編號,0 1 2表示最上方的積木哪面朝上。轉移方程容易推導。暴力...

計數 NOIP2016提高A組模擬7 15

樣例輸入 2 10 樣例輸出 90資料範圍 剖解題目 題目說的很明了了。思路 求方案數,一般會設計道dp,規律之類的。解法 數字dp,設f i j 表示當前到了第i位,這一位的數字是j的方案數。自然有 f i j f i 1 l f i j 0 l k 且 l 0 and j 0 看到這位數,很明顯...

NOIP2016提高A組模擬9 2 單峰

問1 n,n個數的全排列中有多少個滿足單峰序列的性質,並把答案mod 1e9 7 這題還是很簡單的,一開始打了乙個50分的做法,然後發現答案就是2n 1,然後沒有發現輸入也會爆,於是就得了50分 我們容易發現峰一定是最大的那個數,我們把峰放到每乙個位置上,然後在往峰的左邊隨便填一些數,每種填數的方法...