#include<iostream>
#include <cstring>
#include<cmath>
using namespace std;
int main()
{
int n,m,s,a[60],dp[1020];
while(cin>>n>>m>>s)
{
memset(dp,0,sizeof(dp));
dp[0]=1;
for(int i=0;i<m;i++)
cin>>a[i];
for(int i=0;i<m;i++)
{
for(int j=s;j>=a[i];j--)
{
if(dp[j-a[i]])
{
if(!dp[j]&&j==a[i])
dp[j]=1;
else if(!dp[j]||dp[j]>=dp[j-a[i]])
dp[j]=dp[j-a[i]]+1;
}
}
}
for(int i=s;i>=0;i--)
{
if(dp[i]&&dp[i]<=n)
{
cout<<i<<endl;
break;
}
}
}
return 0;
}
限定數量的01揹包
Description
農大ACM校隊暑假培訓終於結束了,大家很興奮,爲此想一起聚餐慶祝一下。大家一共帶了S money去了一家餐廳。這家餐廳共有m道不同的菜可點。由於口味各不相同,所以定了個這麼點菜規則:每人點一道菜,且不能點相同的菜,直到所有人都點完或者所剩的錢不夠去再點新的一道菜。現在就讓你來計算一下最多可能的花費。
Input
輸入多組測試數據,每組第一行爲三個正整數,n,m,s分別代表這次晚餐總人數,餐廳可點的菜數,以及共帶去的錢數。接下去一行m個數,分別描述每道菜的價格,也都爲正整數。n≤20 , m≤50 , s≤1000
Output
每個測試數據一行,本次聚餐可能的最高消費。
Sample Input
10 15 100
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2 6 25
2 3 4 5 6 24
Sample Output
100
24
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.