洛谷 P1049 裝箱問題 (dfs)
阿新 • • 發佈:2020-12-08
題目描述
有一個箱子容量為V(正整數,0≤V≤20000),同時有n個物品(0<n≤30,每個物品有一個體積(正整數)。
要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。
輸入格式
1個整數,表示箱子容量
1個整數,表示有n個物品
接下來n行,分別表示這n個物品的各自體積
輸出格式
1個整數,表示箱子剩餘空間。
輸入輸出樣例
輸入 #124 6 8 3 12 7 9 7輸出 #1
0
做一下剪枝的筆記
#include<iostream> #include<cstdio> #include<algorithm> using namespacedfsstd; 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; }