洛谷没有的题,自己的暴力搜索跑的飞快
感觉复杂度玄学(好像什么枝都没减)
#include <bits/stdc++.h>
using namespace std;
int n,w;
int wei[30];
int ans[30];
int pre[30];
int tail;
int maxn;
bool cmp(int a,int b)
{
return a>b;
}
void dfs(int k)
{
if(tail>=maxn)
{
return;
}
if(k>n)
{
maxn=tail;
return;
}
if(pre[k]<tail-1)
{
return;
}
pre[k]=tail;
for(int i=1;i<=tail;i++)
{
if(ans[i]+wei[k]<=w)
{
ans[i]+=wei[k];
dfs(k+1);
ans[i]-=wei[k];
}
}
tail++;
ans[tail]=wei[k];
dfs(k+1);
ans[tail]=0;
tail--;
return;
}
int main()
{
scanf("%d %d",&n,&w);
for(int i=1;i<=n;i++)
{
scanf("%d",&wei[i]);
}
sort(wei+1,wei+1+n,cmp);
maxn=n;
for(int i=1;i<=n;i++)
{
pre[i]=INT_MAX;
}
dfs(1);
printf("%d\n",maxn);
return 0;
}
/*
5 1996
1
2
1994
12
29
*/