TLE,复杂度哪里出了问题
查看原帖
TLE,复杂度哪里出了问题
129926
无叶科夫楼主2020/11/23 15:57
#include<bits/stdc++.h>
using namespace std;
template <class T> void re(T &x);

int n,m,sum,ans;
int a[23];
int ta[23];
bitset<2005>f;
void bag()
{
    int curans(0);
    f.reset();
    f[0]=1;
    for(int i=1;i<=n;++i)
    {
        for(int j=sum;j>=a[i];--j)
        {
            f[j]=f[j]|f[j-a[i]];
        }
    }
    for(int i=1;i<=sum;++i)
    if(f[i])++curans;
    ans=max(ans,curans);
    return;
}
void dfs(int c,int k)
{
    if(k==0)
    {
        bag();
        return;
    }
    for(int i=c+1;i<=n;++i)
    {
        sum-=a[i];
        a[i]=0;
        dfs(i,k-1);
        a[i]=ta[i];
        sum+=a[i];
    }
    return;
}
int main()
{
    re(n);re(m);
    for(int i=1;i<=n;++i)
    {
        re(a[i]);
        sum+=a[i];
        ta[i]=a[i];
    }
    dfs(0,m);
    cout<<ans;
    return 0;
}

template <class T> void re(T &x)
{
    x=0;bool f=0;char ch=getchar();
    while(ch<'0'||ch>'9')
    {f|=(ch=='-');ch=getchar();}
    while(ch>='0'&&ch<='9')
    {x=x*10+ch-48;ch=getchar();}
    if(f)x=-x;
}
2020/11/23 15:57
加载中...