|
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <cmath>
- #include <cstdlib>
- #include <algorithm>
- #include <queue>
- #include <stack>
- using namespace std;
- int n,k,a[10000],ans[10000],maxn=-0x3f3f3f3f;
- int suan(int x)
- {
- int f[10000];
- f[0]=0;
- for(int i=1;i<=a[x]*n;i++)
- f[i]=0x3f3f3f3f;
- for(int i=1;i<=x;i++)
- for(int j=a[i];j<=a[x]*n;j++)
- f[j]=min(f[j],f[j-a[i]]+1);
- for(int i=1;i<=a[x]*n;i++)
- if(f[i]>n)
- return i-1;
- return a[x]*n;
-
- }
- void dfs(int num,int ma)
- {
- if(num==k)
- {
- if(ma>maxn)
- {
- maxn=ma;
- for(int i=1;i<=k;i++)
- ans[i]=a[i];
- }
- return;
- }
- for(int i=a[num]+1;i<=ma+1;i++)
- {
- a[num+1]=i;
- dfs(num+1,suan(num+1));
- }
- }
- int main()
- {
- scanf("%d%d",&n,&k);
- a[1]=1;
- dfs(1,n);
- for(int i=1;i<=k;i++)
- printf("%d ",ans[i]);
- printf("\nMAX=%d",maxn);
- return 0;
- }
复制代码 |
|