写了很详细的解释,思路和题解一样,希望能帮助大家

P1021 [NOIP1999 提高组] 邮票面值设计

哦对了我是蒟蒻一枚,看了题解才明白怎么做的(捂脸
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


|