摘自《算法竞赛入门经典(第2版)》 P265
保留以后做参考:
void print_ans(int *d, int s) { for(int i = 1; i <= n; i++) if(S >= V[i] && d[S] == d[S - V[i]] + 1) { printf("%d", i); print_ans(d, S - V[i]); break; } }
或者每次更新DP的同时, 更新一个记录方案的数组next[]