牛客网【每日一题】4月28日题目精讲 美味菜肴
鏈接:
時間限制: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<n,m≤50,0<j≤n,其他值均<106,美味值必須通過完整做出菜肴得到,數據保證在規定時間內至少能完整做出1道菜肴。
輸出描述:
輸出一行,一個整數,表示最大總美味值。
示例1
輸入
復制
輸出
復制
示例2
輸入
復制
輸出
復制
備注:
最大總美味值可能為負。
題解:
看完題第一反應是比性價比(最近剛做了一個題),就是制造出一個評比標準,然后排序,進行美味值計算
兩個菜肴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/bx<ty/by,除法多不好算,改成乘法
tx * 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表示當前菜所要消耗的新鮮值
后兩者相減為做這個菜所得到的美味值
總結
以上是生活随笔為你收集整理的牛客网【每日一题】4月28日题目精讲 美味菜肴的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小Q画笔
- 下一篇: 百度抢票宝怎么抢票?