#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
struct node {
int num;
int value;
int money;
}s[105];
int dp[15][10005];
int n, v, m;
int main()
{
while(scanf("%d%d%d", &n, &v, &m)!= EOF) {
for(int i = 0; i < n; i++) {
scanf("%d%d%d", &s[i].num, &s[i].money, &s[i].value);
}
memset(dp, -1, sizeof(dp));
memset(dp[0], 0, sizeof(dp[0]));
for(int i = 1; i <= m; i++)
for(int j = 0; j < n; j++) {
for(int k = v; k >= s[j].money; k--) {
if(s[j].num == i)
dp[i][k] = max(dp[i][k], max(dp[i][k - s[j].money ]+ s[j].value, dp[i-1][k-s[j].money] + s[j].value));
}
}
if(dp[m][v] > 0)
printf("%d\n", dp[m][v]);
else
printf("Impossible\n");
}
return 0;
}
hdu3033分组背包
最新推荐文章于 2019-05-07 16:51:25 发布