01背包(动规)

 

 

/*
4 5
2 3
1 2
3 4
2 2
_____
7
*/
#include<iostream>
#define MAX 1000

using namespace std;

int max(int n1, int n2){return n1>n2?n1:n2;}

int dp[MAX][MAX], n, m, w[MAX], v[MAX];

int rec(int i, int j)
{
    if(dp[i][j]>=0) return dp[i][j];
    int res;
    if(i==n){
        res=0;
    }else if(j<w[i]){
        res = rec(i+1, j);
    }else {
        res = max(rec(i+1, j), rec(i+1, j-w[i])+v[i]);
    }

    return dp[i][j]=res;
}

int main()
{
    int  i, j, ans;

    cin>>n >> m;
    for(i=0; i<n; i++)
        cin>>w[i] >>v[i];

    memset(dp, -1, sizeof(dp));

    ans = rec(0, m);

    cout<<ans<<endl;

    system("pause");
    return 0;
}

 

posted @ 2013-11-22 20:25  偶尔会寂寞  阅读(124)  评论(0编辑  收藏  举报