这道题有个小小的坎,就是低于5块不能选,大于5块,可以任意选,所以就在初始条件判断一下剩余钱数,然后如果大于5的话,这时候就要用到贪心的思想,只要大于等于5,先找最大的那个,然后剩下的再去用背包去选择,这样的结果一定是最优的。因为最大的那个一定会被选中,剩下多少钱都无所谓,用背包可以获得剩下的最优解,所以最后也是最优解

代码如下

 #include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = ;
int dp[N];
int value[N];
int main()
{
int n;
while (scanf("%d", &n) == , n)
{
for (int i = ; i < n; i++)
scanf("%d", &value[i]);
int v;
scanf("%d", &v);
if (v < )//如果初始条件都不满足,直接输出金额
{
printf("%d\n", v);
continue;
}
sort(value, value + n);//排序
memset(dp, , sizeof(dp));
//01背包
for (int i = ; i < n - ; i++)
{
for (int j = v - ; j >= value[i]; j--)
if (dp[j] < dp[j - value[i]] + value[i])
dp[j] = dp[j - value[i]] + value[i];
}
printf("%d\n", v - dp[v - ] - value[n - ]);
}
return ;
}

最新文章

  1. C#中的Excel操作【1】——设置Excel单元格的内容,打开Excel文件的一种方式
  2. vmware安装ubuntu12.04嵌套安装xen server(实现嵌套虚拟化)
  3. nutch-2.1导入eclipse+mysql运行
  4. H20的题——[noip2003]银河英雄传(并查集)
  5. 今天踩过的坑——structs和spring
  6. Python中的日志管理Logging模块
  7. 虚反矩阵指令pinv之应用
  8. 让你的Windows不断重启的C语言代码
  9. Java学习笔记之I/O
  10. A tutorial that will show you how to build an instant messaging app with Sinch.
  11. webpack配置之代码优化
  12. Python中的test测试
  13. c++: internal compiler error: Killed
  14. 关于爬虫中常见的两个网页解析工具的分析 —— lxml / xpath 与 bs4 / BeautifulSoup
  15. Git -- 本地 一个相同的新的分支 并 推送到远程仓库
  16. 标准库 os、sys、logging、configparser、time、requests
  17. C#数组维数及不同维数中元素个数的获取
  18. rsync更改端口后的同步办法
  19. 用lua扩展你的Nginx(整理)
  20. git 知识点

热门文章

  1. JavaScript-学习一全局变量
  2. OpenGL画图旋转
  3. DropDownList自动生成年月日
  4. PHP自定义错误处理
  5. .net FrameWork4.0安装未成功
  6. 转:为什么要使用NoSQL
  7. Red Hat TimesTen安装记录
  8. Android 之 WebView
  9. lua学习笔记之-语言基础
  10. 自己动手学TCP/IP–http协议(http报文头)