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");





}

你可能感兴趣的:(OJ)