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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Codevs 1025 选菜

發布時間:2025/3/15 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Codevs 1025 选菜 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1025 選菜

?

?時間限制: 1 s ?空間限制: 128000 KB ?題目等級 : 黃金 Gold 題解 題目描述?Description

?? ? ??在小松宿舍樓下的不遠處,有PK大學最不錯的一個食堂——The Farmer’s Canteen(NM食堂)。由于該食堂的菜都很不錯,價格也公道,所以很多人都喜歡來這邊吃飯。The Farmer’s Canteen的點菜方式如同在超市自選商品一樣,人們從一個指定的路口進去,再從一個指定的路口出來并付款。由于來這里就餐的人數比較多,所以人們自覺地在進入口的時候就排成一個長隊,沿著長長的擺放著各式各樣佳肴的桌子進行選菜。

?????? 小松發現,這種選菜方式意味著,他不能在選菜的時候離開隊伍去拿一些他已經看過了的菜或者沒有看過的菜,因為插隊是不禮貌的,也是被BS的。

?????? 每個菜有一個價值,而小松也自己給每個菜定了一個在他看來的美味價值,例如紅燒小黃魚在小松看來是美味價值很高的,而花菜在小松眼里則是美味價值極低的菜肴。而有一些菜是營養價值極其高的菜(例如米飯),所以無論它的美味價值是多少,小松都會選擇1份。現在小松帶了X元錢來食堂就餐,他想知道,在不欠帳的情況下,他選菜的美味價值總合最大是多少。

輸入描述?Input Description

?? ? ??請從輸入文件farmer.in中讀入相關數據。輸入的第一行包括兩個個整數n(1≤n≤100),k(0≤k≤實際菜的種類)和一個實數X(0≤X≤100),表示有n個菜式,有k種菜是必選的,小松帶來了X元錢(精確到“角”)。接下來的1行包含n個實數,表示菜桌上從入口到出口的所有菜的價格(0≤價格≤10,單位“元”,精確到“角”);再接下來的1行包含n個整數,表示菜桌上從入口到出口的所有菜的美味價值(0≤美味價值≤100);再接下來一行包含n個整數,表示菜桌上從入口到出口的所有菜的種類編號(1≤種類編號≤100)。最后一行包含k個整數分別表示必選菜的種類編號。要注意的是,同一種編號的菜可以出現多次,但是他們的價格和美味價值都是一樣的。對于同一種菜(無論是不是必選菜),小松最多只會選擇1份(買兩份紅燒豆腐多沒意思啊)。另外,必選菜的價格之和一定不超過X。

輸出描述?Output Description

?? ? ??請將結果輸出到輸出文件farmer.out中。輸出包含一個整數,表示小松能選到的菜的美味價值總和最大是多少。

???????注:你可以假設數據中不會出現小松帶的錢不夠買必買菜的情況。

?

樣例輸入?Sample Input

7 1 5.0

4 1 3 0.9 2 0.5 0.9

7 3 5 2 5 0 2

6 3 5 2 4 1 2

2

樣例輸出?Sample Output

10

/*把價格*2變成整數,01背包 */ #include<iostream> #include<cstdio> #include<algorithm> int n,m,k,dp[1010],ans; double s; int vis[110]; using namespace std; struct node{int w,v,id; }a[110]; int cmp(node x,node y){return x.id<y.id;} int main(){scanf("%d%d%lf",&n,&k,&s);m=s*10/1;for(int i=1;i<=n;i++){scanf("%lf",&s);a[i].w=s*10/1;}for(int i=1;i<=n;i++)scanf("%d",&a[i].v);for(int i=1;i<=n;i++)scanf("%d",&a[i].id);int x;for(int i=1;i<=k;i++){scanf("%d",&x);vis[x]=1;}for(int i=1;i<=n;i++){if(vis[a[i].id]==1){vis[a[i].id]=2;ans+=a[i].v;m-=a[i].w;}}for(int i=1;i<=n;i++){if(vis[a[i].id])continue;for(int j=m;j>=a[i].w;j--){dp[j]=max(dp[j],dp[j-a[i].w]+a[i].v);}vis[a[i].id]=1;}ans+=dp[m];printf("%d",ans); }

?

轉載于:https://www.cnblogs.com/thmyl/p/7222879.html

總結

以上是生活随笔為你收集整理的Codevs 1025 选菜的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。