人間夜行

一切の有為の法 夢幻泡影の如し

RQNOJ 147 装箱问题

| 评论

//简单的01背包,可以参考饮食问题。(几乎一样,汗==)
#include <stdio.h>
int max(int a,int b)
{
        if(a>b) return a;
        else return b;
}
int main()
{
        int ca[31]={0};
        int f[31][20001];
        int i,r;
        int b;
        int up;
        scanf("%d%d",&up,&b);
        for(i=1;i<=b;i++) scanf("%d",&ca[i]);
        for(r=0;r<=up;r++)
                if(r<ca[1]) f[1][r]=0;
                else f[1][r]=ca[1];
        for(i=2;i<=b;i++)
                for(r=0;r<=up;r++)
                {
                        if(r<ca[i]) f[i][r]=f[i-1][r];
                        else f[i][r]=max(f[i-1][r],f[i-1][r-ca[i]]+ca[i]);
                }
        printf("%d",up-f[b][up]);
        return 0;
}

评论