牛客網 每日一題 4月28日題目精講 美味菜餚

2022-05-05 14:30:09 字數 2294 閱讀 2816

時間限制:c/c++

1秒,其他語言2秒

空間限制:c/c++

32768k,其他語言65536k

64bit io format:

%lld

小明是個大廚,早上起來他開始一天的工作。他所在的餐廳每天早上都會買好n件食材(每種食材的數量可以視為無限),小明從到達餐廳開始就連續工作t時間。每道菜餚的製作需要特定的一種食材以及一段時間,但是食材一旦放久就不新鮮了,菜的美味值會降低。第i道菜餚有三個屬性ai,bi,ci,ai是該菜餚的美味值,bi是該菜餚所選食材不新鮮的速率,如果在第t時刻完成第i道菜則美味值為:ai-t*bi,完成這道菜需要ci的時間。小明希望在這t時間內能做出菜餚使得總美味值最大,所以小明求助於你。

輸入描述:

第1行輸入三個整數n,m,t,分別代表食材種類,菜餚種類和工作時間。 第2行輸入n個整數bi,代表第i個食材不新鮮的速率。

第3-n+2行,每行輸入三個整數j,ai,ci,分別代表第i道菜餚需要的食材編號,菜餚的美味值,完成時間。

資料保證:0輸出描述:

輸出一行,乙個整數,表示最大總美味值。

示例1

輸入複製

1174

2150247

輸出

複製

408
示例2

輸入複製

2210

21110082

503

輸出

複製

84
備註:

最大總美味值可能為負。

看完題第一反應是比價效比(最近剛做了乙個題),就是製造出乙個評比標準,然後排序,進行美味值計算

兩個菜餚x和y先後製作看看美味值

先x後y:a[x]−(sum+t[x])∗b[x]+a[y]−(sum+t[x]+t[y])∗b[y](1)

先y後x:a[y]−(sum+t[y])∗b[y]+a[x]−(sum+t[x]+t[y])∗b[x](2)

sum是之前所做的菜所用的時間

我們要知道哪個順序做最佳,兩者比較,假如說先x後y最佳,式子1>式子2,經過化簡可以得到tx/bxx * by

< ty* bx

然後我們可以用dp來做,01揹包,dp[i]表示各個時間t完美味值情況

我用的結構體,edge

a美味值,b不新鮮速率,c時間,j順序

dp[j]=max(dp[j],dp[j-edge[i].c]+edge[i].a-j*edge[edge[i].j].b);

dp[j-edge[i].c]+edge[i].a-jedge[edge[i].j].b中

第乙個dp表示在做這個菜之前的時間內所得到的美味值

edge[i].a表示食材起初的美味值

jedge[edge[i].j].b表示當前菜所要消耗的新鮮值

後兩者相減為做這個菜所得到的美味值

#include

typedef

long

long ll;

using

namespace std;

const

int inf=

-1e9-2

;const

int maxn=

2e5+8;

ll sum=inf;

//美味值可能是負值

int n,m,t;

ll dp[maxn]

;struct nodeedge[maxn]

;//bool max(int x,int y)

//bool

cmp(node x,node y)

intmain()

for(

int i=

1;i<=t;i++

)dp[i]

=inf;

//dp賦最小值

for(

int i=

1;i<=m;i++

)for

(int j=t;j>=edge[i]

.c;j--

)for

(int i=

1;i<=t;i++

)sum=

max(sum,dp[i]);

cout

}/*2 2 10

2 11 100 8

2 50 3

*//*

100 2 8

50 1 3

*/

牛客網 每日一題 4月14日題目精講 Xorto

傳送時間限制 c c 2秒,其他語言4秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 給定乙個長度為n的整數陣列,問有多少對互不重疊的非空區間,使得兩個區間內的數的異或和為0。輸入描述 第一行乙個數n表示陣列長度 第二行n個整數表示陣列 1 n 10...

牛客網 每日一題 5月19日題目精講 比賽

時間限制 c c 1秒,其他語言2秒 空間限制 c c 131072k,其他語言262144k 64bit io format lld你在打比賽,這場比賽總共有12個題 對於第i個題,你的隊伍有a i 的機率解決她 如果解決不了她呢?由於所有人討論的都很大聲 所以你有b i 的概率從左邊那個隊那裡聽...

牛客網 每日一題 4月23日題目精講 邊的染色

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld小團有一張n個點,m條邊的無向圖g,有些邊上已經被標記了0或1,表示它的邊權。現在你需要給剩下的邊標記邊權為0或1,求有幾種標記的方式滿足 對於g中任意乙個環,裡面所有邊...