描述
火神為了檢驗 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 ...