饭卡

Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 15507    Accepted Submission(s):
5358

Problem Description
电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。
某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。
 
Input
多组数据。对于每组数据:
第一行为正整数n,表示菜的数量。n<=1000。
第二行包括n个正整数,表示每种菜的价格。价格不超过50。
第三行包括一个正整数m,表示卡上的余额。m<=1000。

n=0表示数据结束。

 
Output
对于每组输入,输出一行,包含一个整数,表示卡上可能的最小余额。
 
Sample Input
1
50
5
10
1 2 3 2 1 1 2 3 2 1
50
0
 
Sample Output
-45
32
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define MAX 1010
#define max(x,y)(x>y?x:y)
using namespace std;
bool cmp(int a,int b)
{
return a<b;
}
int s[MAX],dp[MAX];
int main()
{
int n,m,j,i,k,t,sum;
while(scanf("%d",&n),n)
{
for(i=0;i<n;i++)
scanf("%d",&s[i]);
scanf("%d",&m);
if(m<5)
{
printf("%d\n",m);
continue;
}
memset(dp,0,sizeof(dp));
sum=m-5;
sort(s,s+n);
for(i=0;i<n-1;i++)
{
for(j=sum;j>=s[i];j--)
{
dp[j]=max(dp[j],dp[j-s[i]]+s[i]);
}
}
printf("%d\n",m-dp[sum]-s[n-1]);
}
return 0;
}

  

最新文章

  1. Struts的拦截器
  2. (android) SharedPreferences 两种方式的存储范围
  3. HTTPS实现原理
  4. ubuntu下sh文件使用
  5. Part 71 Code snippets in visual studio
  6. 利用javascript调用摄像头,可以配合socket开发监控系统
  7. SQL SERVER 级联删除
  8. linux的chattr和lsattr命令
  9. iOS 导航条的影响
  10. 能够返回运行结果的system函数加强版本号
  11. ASPF简介
  12. ant 配置 和测试 1
  13. Block高级用法:Block传值UI_12(3)
  14. Spark 基本函数学习笔记一
  15. CSS3之实现光润效果
  16. Open Nginx gzip
  17. Mybatis(一)走进Mybatis与FisrtExample
  18. world转html在线编辑器
  19. 人活着系列之开会(Floy)
  20. vue组件系统

热门文章

  1. vue-cli + webpack
  2. JSON和JSONP,也许你会豁然开朗,含jQuery用例
  3. ExtJs Ext.panel.Panel和Ext.container.Viewport布局问题
  4. Python 学习日志(一)
  5. css之自动换行
  6. 关于JDNI、JMX
  7. 安卓接入ShareSDK问题
  8. SPRING IN ACTION 第4版笔记-第七章Advanced Spring MVC-001- DispatcherServlet的高级配置(ServletRegistration.Dynamic、WebApplicationInitializer)
  9. ActionBar官方教程(9)ActionBar的顶部tab模式(注意,已经被弃用)
  10. Virtual member call in a constructor