動態規劃 烹調方案

2021-10-04 18:29:51 字數 1844 閱讀 4356

題目

由於你的幫助,火星只遭受了最小的損失。但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時間內做出最美味的食物,但是這些食物美味程度的...