d637

輸入說明 :

每個測資點僅一組測資,不必EOF讀檔。 第一行有正整數n(1<n<=10000)表示有n顆鴨飼料 接下來的n行,每行有ab兩個正整數, a代表這顆鴨飼料的體積,b代表飽足感(1<=a<=100 , 1<=b<=5000) 並且鴨子最多可以吃滿100體積的飼料。

輸出說明 :

請輸出這袋鴨飼料能帶給路過的鴨的最大飽足感!

0,1背包問題,可以看這篇

假如背包可以放重量為w價值為v的東西

那就去比較放這個東西

(背包重量要減去w,因為你要放這個東西,要把原先w多的東西拿走,價值加上v的加值)
不放這個東西,那就是原本的背包

看誰的價值,比較高,再決定要不要放

#include<stdio.h>

int max(int a,int b)
{
    return (a>=b)?a:b;
}

int main()
{
    int n;
    scanf("%d",&n);

    int lim;
    int w,v; //重量&價值
    int a[101]={0}; 

    while(n--)
    {
        scanf("%d%d",&w,&v);

        lim=100;

        while(lim-w>=0)
        {
            a[lim] = max(a[lim-w]+v,a[lim]);    
            lim--;
        }    

    } 
    printf("%d\n",a[100]);
}