4631 瘋狂的火神

2021-09-25 19:52:00 字數 2886 閱讀 8098

描述

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

nn 個人。

由於火神訓練時間有限,最多只有 t

tt 分鐘,所以他可以選擇一部分人來單挑, 由於有小 y 的幫助,他得到了每個人特定的價值,每個人的價值由乙個三元組 (a,

b,c)

(a,b,c)

(a,b,c

)組成,表示如果火神在第 x 分鐘單挑這個人,他就會得到 a−b

∗x

a-b*x

a−b∗

x 的經驗值, 並且他需要 c

cc 分鐘來打倒這個人。

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

輸入第一行乙個正整數t

tt,表示資料組數。

對於每組資料,第一行為兩個正整數 n

nn 和t

tt,表示跟火神單挑的人的個數和 火神的訓練時間。下面 n

nn 行,每行三個正整數 ai,

bi,c

iai,bi,ci

ai,bi,

ci,表示每個人的價值,含義見題目。

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

樣例輸入

1

4 10

110 5 9

30 2 1

80 4 8

50 3 2

樣例輸出
88
提示

解析:可以看出,該題的原型是01

0101

揹包問題

首先可知並不是所有的人都要選入被挑戰的隊伍,則演算法第一步便是按某種優先順序排序:

對於兩個人i

ii和j

jj誰先被挑戰選其中更優的方案,設之前的選擇都已達到最優,即挑戰兩人前所花的時間相同,又因為都要挑戰i

ii和j

jj,所以結束對兩人的挑戰時所花時間也相同,設t

tt為挑戰兩人前則只需要判斷a[i

]−b[

i]∗(

c[i]

+t)+

a[j]

−b[j

]∗(t

+c[i

]+c[

j]

)a[i]-b[i]*(c[i]+t)+a[j]-b[j]*(t+c[i]+c[j])

a[i]−b

[i]∗

(c[i

]+t)

+a[j

]−b[

j]∗(

t+c[

i]+c

[j])

與a [j

]−b[

j]∗(

c[j]

+t)+

a[i]

−b[i

]∗(t

+c[j

]+c[

i]

)a[j]-b[j]*(c[j]+t)+a[i]-b[i]*(t+c[j]+c[i])

a[j]−b

[j]∗

(c[j

]+t)

+a[i

]−b[

i]∗(

t+c[

j]+c

[i])

整理一下,就是判斷 −b[

j]∗c

[i

]- b[j] * c[i]

−b[j]∗

c[i]

與− b[

i]∗c

[j

]- b[i] * c[j]

−b[i]∗

c[j]

的大小,取絕對值小的更優

排完序後再跑一遍01dp

01dp

01dp

就可以了

code

#include

using

namespace std;

intread()

while

(isdigit

(ch)

)return s*f;

}const

int n=

3e3+5;

struct fjyl[

205]

;int f[n]

,vis[n]

,cz[n]

;int m,n,t,ans;

bool

com(

const fjy &x,

const fjy &y)

intmax

(int x,

int y)

intmain()

/*sort(l+1,l+n+1,com);*/

for(

int i=

1;i<=n;i++

)for

(int j=

1;j<=n-

1;j++)if

(l[j]

.b*l[j+1]

.c.c*l[j+1]

.b)swap

(l[j]

,l[j+1]

);/*for(int i=1;i<=n;i++)

if(l[i].a-l[i].b*l[i].c>f[l[i].c])

while(!q.empty())

}*/for(

int i=

1;i<=n;i++

)for

(int i=t;i>

0;i--)if

(ans) ans=f[i]

;printf

("%d\n"

,ans)

;ans=0;

}// fclose(stdin);

// fclose(stdout);

return0;

}

JZOJ 4694 火神的魚

在池塘裡用一張網 左下角x1,y1,右上角x2,y2 捕魚,網和池塘都是乙個矩形,池塘裡有n條魚,這些魚會四處游動,火神會在魚游動的間隙問你現在網裡有多少條魚。魚的游動可以概括為兩個動作 1 l r d 表示標號在 l,r 這個區間內的魚向x軸正方向游動了d個單位長度。2 l r d 表示標號在 l...

HDU5283 JZOJ4694 火神的魚

description 火神最愛的就是吃魚了,所以某一天他來到了乙個池塘邊捕魚。池塘可以看成乙個二維的平面,而他的漁網可以看成乙個與座標軸平行的矩形。池塘裡的魚不停地在水中游動,可以看成一些點。有的時候會有魚游進漁網,有的時候也會有魚游出漁網。所以火神不知道什麼時候收網才可以抓住最多的魚,現在他尋求...

校內模擬 火神的魚(分塊)(均攤分析)

傳送門是不可能有的了 聯賽組今天考試的t3,覺得很有科學打臉價值就來寫一寫。首先正解是乙個需要四棵線段樹的o n log n mlog n o n log n m log n o nlogn mlogn 做法,常數巨大。本著科學打臉觀。我寫了乙個o n m n o n m sqrt n o n m ...