1 条题解
-
0
C++ :
#include<bits/stdc++.h> using namespace std; const int N=20; int w[N],sum[N]; int ans=N,n,m; void dfs(int k,int u) { if(k>=ans) //剪枝2:最优性剪枝,当前分支不可能优于已有答案 { return ; } if(u==n) { ans=k; return ; } for(int i=0;i<k;i++) { if(w[u]+sum[i]<=m) //剪枝3:可行性 { sum[i]+=w[u]; dfs(k,u+1); sum[i]-=w[u]; } } sum[k]=w[u]; dfs(k+1,u+1); sum[k]=0; } int main() { cin>>n>>m; for(int i=0;i<n;i++) cin>>w[i]; //剪枝1:优化搜索顺序 sort(w,w+n); reverse(w,w+n); dfs(0,0); cout<<ans; return 0; }
- 1
信息
- ID
- 791
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者