hdu 2546 0-1背包问题

money-5 之后这个题可以转化为求最接近money-5的值,典型的0-1背包问题

 


#include
#include
#include
#include
using namespace std;
const int N=1010;
int main()
{
      int n,m,price[N],flag[N];
      while(cin>>n&&n)
      {     
            int money;
            memset(flag,0,sizeof(flag));
            for(int i=0;i>price[i];
            cin>>m;
            if(m<5) 
            {
                 cout<=0;j--)//这个是关键!!!不能逆序只能顺序(覆盖) 
                  {
                       if(flag[j]==1)
                       flag[j+price[i]]=1; // 
                  }
            }
            for(money=m-5;money>=0;money--)//从m-5开始 
                  if(flag[money]==1)
                  break;
                  
            cout<


 

你可能感兴趣的:(背包问题,hdu水题)