Typical full knapsack problem
this is a template, the best note of it
#include<stdio.h>
#include<string.h>
int dp[10000];
int max(int a,int b)
{
return a>b?a:b;
}
int main(void){
int money,n,i,k,y,j,value[3]={150,200,350},times;
scanf("%d",×);memset(dp,0,sizeof(dp));
for(n=1;n<=times;n++)
{
scanf("%d",&money);
for(i=1;i<=3;i++)
{
for(j=value[i-1];j<=money;j++)
{
dp[j]=max(dp[j],dp[j-value[i-1]]+value[i-1]);
}
}
printf("%d\n",money-dp[money]);
}
return 0;
}