为什么递推不行。。。求大佬找错

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<stack>
using namespace std;

int a[105], f[20005], g[20005];
bool isget[105];
stack<int > ans;

int main()
{
memset(g, -1, sizeof(g));
memset(f, 0x3f, sizeof(f));
f[0]=0;
g[0]=0;
int m, n;
cin>>m>>n;
for(int i=1;i<=n;i++) scanf("%d", &a[i]);
sort(a+1, a+1+n);
for(int i=1;i<=n;i++)
for(int j=a[i];j<=m;j++){
int tmp=f[j-a[i]];
if(g[j-a[i]]!=i) tmp++;
if(tmp<f[j]){
f[j]=tmp;
g[j]=i;
}
}
cout<<f[m]<<' ';
int k=m;
while(k){
if(!isget[g[k]]){ ans.push(a[g[k]]); isget[g[k]]=true; }
k-=a[g[k]];
}
while(!ans.empty()){ cout<<ans.top()<<' '; ans.pop(); }
cout<<endl;
return 0;
}

0 条评论

目前还没有评论...

信息

ID
1159
难度
7
分类
动态规划 | 背包 点击显示
标签
(无)
递交数
2012
已通过
457
通过率
23%
被复制
5
上传者