HDU 2546 饭卡——背包 + 贪心
排序后把前n-1个物品放到容量为m-5的背包中,获得最大值dp【m-5】,这就是尽量用前n-1个物品填满容量m-5的背包的结果,然后用m-dp【m-5】-a【n】就得到了结果
#include #include #include #include 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;}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~