題目
由於你的幫助,火星只遭受了最小的損失。但gw懶得重建家園了,就造了一艘飛船飛向遙遠的earth星。不過飛船飛到一半,gw發現了乙個很嚴重的問題:肚子餓了~
gw還是會做飯的,於是拿出了儲藏的食物準備填飽肚子。gw希望能在t時間內做出最美味的食物,但是這些食物美味程度的計算方式比較奇葩,於是絕望的gw只好求助於你了。
題目描述
一共有n件食材,每件食材有三個屬性,ai,bi和ci,如果在t時刻完成第i樣食材則得到ai-t*bi的美味指數,用第i件食材做飯要花去ci的時間。
眾所周知,gw的廚藝不怎麼樣,所以他需要你設計烹調方案使得美味指數最大
輸入格式
第一行是兩個正整數t和n,表示到達地球所需時間和食材個數。
下面一行n個整數,ai
下面一行n個整數,bi
下面一行n個整數,ci
輸出格式
輸出最大美味指數
輸入 #1 複製
74 1
5022
47輸出 #1 複製
408【資料範圍】
對於40%的資料1<=n<=10
對於100%的資料1<=n<=50
所有數字均小於100,000
【題目**】
tinylic改編
這是一道揹包題, t時間(揹包容量) ai-t*bi的美味指數(表示t容量下的最大價值)
然後,這道題,不是簡單的取與不取, 而是,先取x,再取y 和 先取y,再取x 的價值是不一樣的。
代入x,y看看。。
//ax - (t+cx)*bx + ay - (t+cx+cy)*by = ay - (t+cy)*by + ax - (t+cy+cx)*bx
//(t+cy+cx)*bx + (t+cy)*by = (t+cx)*bx + (t+cx+cy)*by
//cy *bx = cx *by
//要想食材 x>y : 必須滿足 cy*bx > cx*by
所以我們先讀入資料,再按(cybx > cxby)排序。然後用揹包思維做題就可以了。
//ax - (t+cx)*bx + ay - (t+cx+cy)*by = ay - (t+cy)*by + ax - (t+cy+cx)*bx
//(t+cy+cx)*bx + (t+cy)*by = (t+cx)*bx + (t+cx+cy)*by
//cy *bx = cx *by
//要想食材 x>y : 必須滿足 cy*bx > cx*by
#include
#include
using
namespace std;
typedef
long
long ll;
const
int maxn =
100005
;ll t,n;
ll dp[maxn]
;struct datad[maxn]
;bool
cmp(data x,data y)
intmain()
for(
int i=
1;i<=n;i++
)for
(int i=
1;i<=n;i++
)//重要是這步
sort
(d+1
,d+1
+n,cmp)
;for
(int i=
1;i<=n;i++)}
ll ans=0;
for(
int i=
1;i<=t;i++
) cout
}
烹調方案 (DP)
傳送門 一道非常好的dp。看這個可能會覺得與01揹包很像,不過這個的問題在於現做的菜餚會影響到後面的菜餚的價值。我們在進行01揹包dp時,一件物品的價值是不隨著其被列舉的位置改變而改變的,但是這道題中不行。假設你現在有兩種菜餚,你先做第一種會導致第二種的價值受損,反之第一種的價值就會受損,我們並不能...
動態規劃 方案問題
好長時間沒有發新的部落格 其實是因為一直在更新揹包問題 名副其實,就是求方案數 以洛谷上質數和分解 這個題為例 可以明顯看出這是乙個完全揹包,因為每個物品都可以選無數次,其實本蒟蒻覺得動規題首先考慮的就是揹包 那什麼是費用什麼又是價值呢?我們要求得是方案數,那麼方案數就是價值 那麼,我們要湊的數就是...
洛谷1417 烹調方案
洛谷1417 烹調方案 題目背景 由於你的幫助,火星只遭受了最小的損失。但gw懶得重建家園了,就造了一艘飛船飛向遙遠的earth星。不過飛船飛到一半,gw發現了乙個很嚴重的問題 肚子餓了 gw還是會做飯的,於是拿出了儲藏的食物準備填飽肚子。gw希望能在t時間內做出最美味的食物,但是這些食物美味程度的...