日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

牛客网【每日一题】4月28日题目精讲 美味菜肴

發(fā)布時間:2023/12/3 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 牛客网【每日一题】4月28日题目精讲 美味菜肴 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

鏈接:

時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 32768K,其他語言65536K 64bit IO Format: %lld

題目描述

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

輸入描述:

第1行輸入三個整數(shù)n,m,T,分別代表食材種類,菜肴種類和工作時間。 第2行輸入n個整數(shù)bi,代表第i個食材不新鮮的速率。
第3-n+2行,每行輸入三個整數(shù)j,ai,ci,分別代表第i道菜肴需要的食材編號,菜肴的美味值,完成時間。
數(shù)據(jù)保證:0<n,m≤50,0<j≤n,其他值均<106,美味值必須通過完整做出菜肴得到,數(shù)據(jù)保證在規(guī)定時間內(nèi)至少能完整做出1道菜肴。

輸出描述:

輸出一行,一個整數(shù),表示最大總美味值。

示例1
輸入
復(fù)制

1 1 74 2 1 502 47

輸出
復(fù)制

408

示例2
輸入
復(fù)制

2 2 10 2 1 1 100 8 2 50 3

輸出
復(fù)制

84

備注:
最大總美味值可能為負。

題解:

看完題第一反應(yīng)是比性價比(最近剛做了一個題),就是制造出一個評比標準,然后排序,進行美味值計算
兩個菜肴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,經(jīng)過化簡可以得到tx/bx<ty/by,除法多不好算,改成乘法
tx * by< ty* bx
然后我們可以用dp來做,01背包,dp[i]表示各個時間t完美味值情況
我用的結(jié)構(gòu)體,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表示在做這個菜之前的時間內(nèi)所得到的美味值
edge[i].a表示食材起初的美味值
jedge[edge[i].j].b表示當前菜所要消耗的新鮮值
后兩者相減為做這個菜所得到的美味值

#include<bits/stdc++.h> 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 node{ll j,a,b,c; }edge[maxn]; //bool max(int x,int y) //{ // return x<y; //} bool cmp(node x,node y) {return x.c*edge[y.j].b<y.c*edge[x.j].b; } int main() {scanf("%lld%lld%lld",&n,&m,&t);for(int i=1;i<=n;i++)scanf("%lld",&edge[i].b);for(int i=1;i<=m;i++)scanf("%lld%lld%lld",&edge[i].j,&edge[i].a,&edge[i].c);sort(edge+1,edge+1+m,cmp); // // for(int i=1;i<=m;i++) // { // cout<<edge[i].j<<" "<<edge[i].a<<" "<<edge[i].b<<" "<<edge[i].c<<endl; // }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--){ll w= dp[j-edge[i].c]+ edge[i].a - j * edge[i].b; // printf("%lld %lld %lld\n ",dp[j-edge[i].c],edge[i].a,j * edge[i].b);dp[j]=max( dp[j] , dp[j-edge[i].c]+edge[i].a-j * edge[i].b); // printf("w=%lld,dp[%d]=%lld\n",w,j,dp[j]);} for(int i=1;i<=t;i++)sum=max(sum,dp[i]);cout<<sum<<endl;return 0; } /* 2 2 10 2 1 1 100 8 2 50 3 */ /* 100 2 8 50 1 3 */

總結(jié)

以上是生活随笔為你收集整理的牛客网【每日一题】4月28日题目精讲 美味菜肴的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。