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;
}