这个是完全背包,可以看做容量和价值相等的完全背包。
求出可以买的价值最多的,然后用总钱减去即可。
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
using namespace std;
int w[3] = {150,200,350};
int main(void)
{
int ncases,n,c;
int money[100001];
cin >> ncases;
while( ncases-- )
{
cin >> c;
memset(money, 0, sizeof(money));
for(int i=0; i<3; i++)
for(int k=w[i]; k<=c; k++)
{
money[k] = max( money[k], money[k-w[i]]+w[i] );
}
cout << c-money[c] << endl;
}
return 0;
}