nyoj开心的小明

这个问题是01背包,而对于编程之美那道是完全背包问题,在编程之美中也有一个0,1背包问题。

而且是容量是小于等于,不是等于,对于是否等于,在初始化参数时候不一样,不小于全部初始化为0,恰好等于,初始化为无穷大,除了0.问什么呢?看算法入门竞赛那本,

背包问题其实不是很好理解,但是代码最终形式很简单,我要学会将问题抽象出来e利用此方法求解

 

#include<iostream>
#include<memory.h>
using namespace std;
const int N=30000;
int dp[N];
int main()
{
    int len;
    cin>>len;
    while(len--)
    {
    memset(dp,0,sizeof(dp));
    int V;
    cin>>V;
    int n;
    cin>>n;
    while(n--)
    {
        int size;
        int value;
        cin>>size;
        cin>>value;

      for(int j=V;j>=size;j--)
      {

          dp[j]=max(dp[j],dp[j-size]+value*size);
      
      
      }
    
    
    
    }
    cout<<dp[V]<<endl;



    
    
    
    
    }


    system("pause");


}

posted @ 2014-05-10 20:28  hansongjiang8  阅读(150)  评论(0编辑  收藏  举报