题意:
在重量一定的前提下怎么使购买的商品的价格尽量高,每个商品只能买一个
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
int n,tn;
const int maxn = 10005;
int t[25];
int dp[maxn];
int path[25][maxn];
int main() {
int i,j;
while(scanf("%d", &n) != EOF) {
scanf("%d", &tn);
for(i=0; i<tn; i++) {
scanf("%d", &t[i]);
}
memset(dp, 0, sizeof(dp));
memset(path, 0, sizeof(path));
int flag;
for(i=0; i<tn; i++)
for(j=n; j>=t[i]; j--) {
if(dp[j]<dp[j-t[i]]+t[i]) {
dp[j] = dp[j-t[i]]+t[i];
path[i][j] = 1;
}
}
for(i=tn, j=n; i>=0; i--) {
if(path[i][j]) {
printf("%d ",t[i]);
j -= t[i];
}
}
printf("sum:%d\n", dp[n]);
}
return 0;
}