码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 2546 01背包

时间:2019-10-10 20:40:46      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:01背包问题   names   mes   color   cout   ref   out   问题   str   

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2546

题意:余额在5元以上可以任意消费,一次一结,问最小余额。

思路:先用5元买最贵的,再找消费最多的,01背包问题。

AC代码:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 
 6 using namespace std;
 7 typedef long long ll;
 8 
 9 int n,m;
10 int w[1055];
11 int dp[1055];
12 
13 void sol(){
14     memset(dp,0,sizeof(dp));    //一开始少了这个找了好久的错
15     for(int i=1;i<=n;i++)
16         cin>>w[i];
17     cin>>m;
18 
19     if(m<5){
20         cout<<m<<endl;
21         return ;
22     }
23 
24     sort(w+1,w+n+1);
25     m-=5;
26 
27     for(int i=1;i<n;i++)
28         for(int j=m;j>=w[i];j--)
29             dp[j]=max( dp[j],dp[j-w[i]]+w[i] );
30     cout<<m+5-dp[m]-w[n]<<endl;
31 }
32 int main(){
33     while(cin>>n,n) sol();
34     return 0;
35 }

 

HDU 2546 01背包

标签:01背包问题   names   mes   color   cout   ref   out   问题   str   

原文地址:https://www.cnblogs.com/xunzf0402/p/11649934.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!