1. 程式人生 > >SDUTOJ 2825 小P尋寶記——粗心的基友 01揹包

SDUTOJ 2825 小P尋寶記——粗心的基友 01揹包

小P尋寶記——粗心的基友

Time Limit: 1000MS Memory limit: 65536K

題目描述

這對好基友他們在經歷無數的艱難險阻後,終於找到了寶藏。無奈的是這一對好基友竟然是一樣的粗心,又忘記了帶一個大一點的包包,可惜啊、、選擇又出現了啊、、 已知包的體積是v,每種寶貝只有一種,寶貝的體積是pi,價值是wi。求出這對粗心的基友可以最多帶走價值多少的寶藏。

輸入

輸入資料有多組。 每組第一行有兩個正整數n(n <= 10000)和v(v <= 10000)分別表示n種寶貝和包的體積。 接下來n行,每行有兩個正整數vi, wi。 分別表示每種寶藏的體積vi (vi<=1000),價值wi(wi<=1000)。

輸出

這對基友所能帶走的最多的寶藏。

示例輸入

5 10 
1 5
2 4
3 3
4 2
5 1

示例輸出

14

提示

來源

xfl

簡單01揹包:

#include <stdio.h>
#include <string.h>
#define max(a,b) (a)>(b)?a:b

int w[10010],v[10010],dp[10010];

int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m))
    {
        for(int i = 1; i <= n; i++)
        {
            scanf("%d%d",&w[i],&v[i]);
        }
        memset(dp,0,sizeof(dp));
        for(int i = 1; i <= n; i++)
        {
            for(int j = m; j >= w[i]; j--)
            {
                dp[j] = max(dp[j],dp[j - w[i]] + v[i]);
            }
        }
        printf("%d\n",dp[m]);
    }
    return 0;
}