1. 程式人生 > 實用技巧 >洛谷 P1049 裝箱問題 (dfs)

洛谷 P1049 裝箱問題 (dfs)

題目描述

有一個箱子容量為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