uva 624
背包问题 总时间为容量,单个唱片时间为各个物体的价值与体积 f【】 用来记录路径
#include <cstdio> #include <cstring> #define M 10005 int a[25],d[M],f[25][M]; int main() { int V; while(scanf("%d",&V) == 1) { int n; memset(d,0,sizeof(d)); memset(f,0,sizeof(f)); scanf("%d",&n); for(int i = 0; i < n; i++) scanf("%d",&a[i]); for(int i = 0; i < n; i++) { for(int j = V; j >= a[i]; j--) { if(d[j] <= d[j-a[i]]+a[i]) { d[j] = d[j-a[i]]+a[i]; f[i][j] = 1; } } } for(int i = n-1, j = V; i >= 0; i--) { if(f[i][j]) { printf("%d ",a[i]); j -= a[i]; } } printf("sum:%d\n",d[V]); } return 0; }