0
点赞
收藏
分享

微信扫一扫

HDU 2546 饭卡——背包 + 贪心


排序后把前n-1个物品放到容量为m-5的背包中,获得最大值dp【m-5】,这就是尽量用前n-1个物品填满容量m-5的背包的结果,然后用m-dp【m-5】-a【n】就得到了结果

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

int n, a[1010], m, dp[1010];

int main()
{
while (cin >> n && n) {
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
cin >> m;
if (m < 5) {
cout << m << endl;
}
else {
sort(a + 1, a + 1 + n);
memset(dp, 0, sizeof(dp));
for (int i = 1; i <= n - 1; i++) {
for (int j = m - 5; j >= a[i]; j--) {
dp[j] = max(dp[j], dp[j - a[i]] + a[i]);
}
}
cout << m - dp[m - 5] - a[n] << endl;
}
}
return 0;
}



举报

相关推荐

0 条评论