哦对了我是蒟蒻一枚,看了题解才明白怎么做的(捂脸
by Miri @ 2017-08-10 15:42:06
为什么是t=k+1,就是全部找完了,不应该是t=k吗?
by 包子入侵 @ 2017-09-19 13:19:11
哦知道了
by 包子入侵 @ 2017-09-19 13:23:51
那个为什么f开5000个,赋初值可以赋更大吗?
by 包子入侵 @ 2017-09-19 13:34:22
```cpp
#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
int a[17],ans[17],i,j,m,k,n,l,maxn;
int dp(int t,int max)
{
int f[50000];
f[0]=0;
for (int i=1;i<=a[t]*n;++i)
f[i]=50000;
for ( int i=1;i<=t;++i)
for ( int j=a[i];j<=a[t]*n;++j)
f[j]=min(f[j],f[j-a[i]]+1);
for(int i=1;i<=a[t]*n;i++)
if(f[i]>n)
return i-1;
return a[t]*n;;
}
inline void dfs(int t,int max)
{
if (t==k+1)
{
if (max>maxn)
{
maxn=max;
for ( int i=1;i<=t-1;++i)
ans[i]=a[i];}
return;
}
for ( int i=a[t-1]+1;i<=max+1;++i)
a[t]=i;
int x=dp(t,max);
dfs(t+1,x);
}
int main()
{
scanf("%d%d",&n,&k);
dfs(1,0);
for (register int i=1;i<=k;++i)
printf("%d ",ans[i]);
cout<<endl;
cout<<"MAX="<<maxn<<endl;
return 0;
}
大佬我这怎么错了
```
by 包子入侵 @ 2017-09-19 13:50:57
@[凭栏](/space/show?uid=48392) 大佬快来
by 包子入侵 @ 2017-09-19 13:53:23
@ xzxOMGV5 你dp()里的数组不能开这么大吧
by 早右昕 @ 2017-09-25 18:00:41
@[InfoEoR](/space/show?uid=34920) 可以啊,你看我题解
by 包子入侵 @ 2017-09-28 13:49:52
@[包子入侵](/space/show?uid=9181) 求问为什么选的时候是mx+1,
by ysj1173886760 @ 2017-11-06 10:12:58