题目描述

有一个箱子容量为V(正整数,0V20000),同时有n个物品(0<n30,每个物品有一个体积(正整数)。

要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。

输入格式

1个整数,表示箱子容量

1个整数,表示有n个物品

接下来n行,分别表示这n个物品的各自体积

输出格式

1个整数,表示箱子剩余空间。

输入输出样例

输入 #1
24
6
8
3
12
7
9
7
输出 #1
0


做一下剪枝的笔记

#include<iostream>
#include<cstdio>
#include<algorithm>

using namespace std;
int m,a,sum;
int minn;
int mass[35];

void dfs(int st)
{
    for(int i=st;sum+mass[i]<=m&&i<a;i++)
    {
        sum+=mass[i];
        dfs(i+1);
        minn=min(minn,m-sum);
        sum-=mass[i];
    }
}
int read()
{
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9')
    {
        if(ch=='-') f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
    {
        x=x*10+ch-'0';
        ch=getchar();
    }
    return x*f;
}
int main()
{
    m=read();a=read();
    minn=m;
    for(int i=0;i<a;i++) mass[i]=read();
    sort(mass,mass+a);
    dfs(0);
    cout<<minn;
    return 0;
}
dfs