题解
模拟,遍历n个物品,一开始一个箱子不给,遍历到某个物品时,先把所有已经给了的箱子放进去试试,再创一个新箱子放进去试试
code
#include<bits/stdc++.h>
using namespace std;
int n,w;
int cnt,ans;
int chongdie=0;
int box[20],c[20];
void moni(int now,int cnt)//now代表遍历到哪个物品,cnt代表当前有多少个箱子
{
if(now==n+1)
{
ans=min(ans,cnt);
return ;
}
if(cnt>=ans) return;//记忆化
for(int i=1;i<=cnt;i++)
{
if(box[i]<c[now]) continue;
box[i]-=c[now];
moni(now+1,cnt);
box[i]+=c[now];
}
cnt++;
box[cnt]-=c[now];
moni(now+1,cnt);
box[cnt]+=c[now];
cnt--;
}
int main()
{
cin>>n>>w;
ans=n;
cnt=0;
for(int i=1;i<=n;i++)
{
cin>>c[i];
box[i]=w;
}
moni(1,0);
cout<<ans;
return 0;
}
标签:箱子,cnt,遍历,int,P3052,Cows,ans,USACO12MAR,now
From: https://www.cnblogs.com/pure4knowledge/p/18115762