在小松宿舍樓下的不遠處,有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中。輸出包含乙個整數,表示小松能選到的菜的美味價值總和最大是多少。
注:你可以假設資料中不會出現小松帶的錢不夠買必買菜的情況。
建立兩組陣列,一組讀入時用。另一組在知道編號之後,把相應的資料放到對應編號的陣列裡,並進行標記,方便處理。
同時將價錢*10,方便變成下標,進行處理。
剩下的就是標註的揹包問題了。
#include
#include
using
namespace
std;
const
int maxn=110;
int vis[maxn]=,a1[maxn],a2[maxn],b1[maxn],b2[maxn],kind[maxn];
int dp[maxn*10]=;//vis是標記陣列,dp陣列大小記得乘10
int main()
for(int i=1;i<=n;++i)
cin>>b1[i];
for(int i=1;i<=n;++i)
for(int i=1;i<=k;++i)
for(int i=1;i<=n;++i)
}cout
0;}
CodeVS1025 選菜 解題報告 揹包型DP
題目描述 description 在小松宿舍樓下的不遠處,有pk大學最不錯的乙個食堂 the farmer s canteen nm食堂 由於該食堂的菜都很不錯,也公道,所以很多人都喜歡來這邊吃飯。the farmer s canteen的點菜方式如同在超市自選商品一樣,人們從乙個指定的路口進去,再...
codevs動態規劃 選菜
在小松宿舍樓下的不遠處,有pk大學最不錯的乙個食堂 the farmer s canteen nm食堂 由於該食堂的菜都很不錯,也公道,所以很多人都喜歡來這邊吃飯。the farmer s canteen的點菜方式如同在超市自選商品一樣,人們從乙個指定的路口進去,再從乙個指定的路口出來並付款。由於來...
1354 選數字 (揹包)
1354 選數字 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 當給定乙個序列a 0 a 1 a 2 a n 1 和乙個整數k時,我們想找出,有多少子串行滿足這麼乙個條件 把當前子串行裡面的所有元素乘起來恰好等於k。樣例解釋 對於第乙個資料,我們可以選擇 3 或...