讨论 / 我有一个点超时了怎么办(急救)
gaojunonly1 2018-06-11 04:43:31
点我顶贴 收藏 删除
#include<bits/stdc++.h>

using namespace std;

namespace program

{

int n,k,a[500],ans[500],Ans=0;

inline void check()

{

int f[20000],cnt=0;

f[0]=0;

while(f[cnt]<=n)

{

cnt+=1;

f[cnt]=0x3f3f3f3f;

for(int i=1;i<=k&&a[i]<=cnt;i++)

f[cnt]=min(f[cnt],f[cnt-a[i]]+1);

}

cnt-=1;

if(Ans<=cnt)

{

Ans=cnt;

for(int i=1;i<=k;i++)

ans[i]=a[i];

}

}

inline void dfs(int x)

{

if(x==k+1)

{

check();

return;

}

for(int i=a[x-1]+1;i<=a[x-1]*n+1;i++)

{

a[x]=i;

dfs(x+1);

}

}

inline void work()

{

cin>>n>>k;

dfs(1);

for(int i=1;i<=k;i++)

cout<<ans[i]<<" ";

cout<<endl;

cout<<"MAX="<<Ans<<endl;

}

}

int main()

{

program::work();

return 0;

}

查看更多回复
提交回复