CodeVS1025 選菜 解題報告 揹包型DP

2021-08-07 14:20:58 字數 1961 閱讀 2043

題目描述 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解題報告

題意就是有一些菜,每個菜有**和美味程度,有一些菜是必選的,我們的錢有限,求最大的美味程度。

顯然是乙個典型的揹包問題,就是要考慮必選的不能重選。

#include

#include

#include

using

namespace

std;

const

int n=100;

int n,k,m,mon,s;

int v[n+5],f[n*n+5];

bool b[n+5];

double p[n+5];

double x;

struct node

a[n+5];

int main()

mon=x*10;

for(int i=1;i<=k;i++)

}for(int i=1;i<=n;i++)

if(b[i])

for(int j=mon;j>=a[i].p;j--)

f[j]=max(f[j],f[j-a[i].p]+a[i].v);

int ss=0;

for(int i=0;i<=mon;i++)ss=max(ss,f[i]);

printf("%d",s+ss);

}

CODE VS 1025 選菜 揹包

在小松宿舍樓下的不遠處,有pk大學最不錯的乙個食堂 the farmer s canteen nm食堂 由於該食堂的菜都很不錯,也公道,所以很多人都喜歡來這邊吃飯。the farmer s canteen的點菜方式如同在超市自選商品一樣,人們從乙個指定的路口進去,再從乙個指定的路口出來並付款。由於來...

解題報告 01揹包

這應該是最基礎的揹包問題了,但正因為他的基礎,他的思想會被用在很多dp題中,所以這裡有必要對他剖析一下。我們應該掌握的方法有兩種 1 二維陣列。2 滾動陣列。後面那個一看就要高階一些,但是確實對動歸沒有太大的幫助,所以大家一定要把第一種方法學好!第二種方法我不做解釋,只會黏貼 大家認真腦補一下應該也...

超大揹包問題解題報告

超大揹包問題 有重量和價值分別為wi和vi的n個物品,從這些物品中挑選總重量不超過w的物品,求所有挑選方案中價值總和最大值 限制條件 1 n 40 1 wi,vi 10 15 1 w 10 15 分析 由於本題w巨大,因此是一道假動態規劃題,如果用動態規劃要麼爆空間要麼超時,於是我們可以抓住n極小的...