hdu_2546

来源:互联网 发布:淘宝助理如何加水印 编辑:程序博客网 时间:2024/05/01 03:43
/* * 首先用5元买价值最大的,然后就是zero one knaspsack * First 5 yuan to buy the largest value, then zero one knaspsack*/#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define MAXCNT1001int dp[MAXCNT], price[MAXCNT];int zero_one_knapsack(int n, int max_price, int max_v){if( max_v < 5 ) {return max_v;}int flag(0); max_v -= 5;memset(dp, 0, sizeof(dp));for(int i = 0; i < n; i ++) {if( max_price == price[i] && !flag ) {flag = 1; continue;}for(int v = max_v; v >= price[i]; v --) {dp[v] = max(dp[v], dp[v-price[i]]+price[i]);}}return (max_v+5)-max_price-dp[max_v];}int main(int argc, char const *argv[]){#ifndef ONLINE_JUDGEfreopen("test.in", "r", stdin);#endifint n, surplus, max_price;while( scanf("%d", &n) ) {if( !n ) {break;}max_price = 0;for(int i = 0; i < n; i ++) {scanf("%d", &price[i]);max_price = max(max_price, price[i]);}scanf("%d", &surplus);printf("%d\n", zero_one_knapsack(n, max_price, surplus));}return 0;}