http://www.cnblogs.com/AOQNRMGYXLMV/p/4934747.html

 #include<iostream>
#include<cstdio>
#include<algorithm> using namespace std;
const int maxn=;
const int inf=0x3f3f3f3f;
int a[maxn];
int b[maxn];
int val[]={,,,,,,,,,};
int Solve(int t)
{
int ans=;
for(int i=;i>=;i--)
{
if(i==||i==)
{
int cnt=min(t/(val[i]*),b[i]/);
ans+=cnt*;
t-=val[i]**cnt;
}
else
{
int cnt=min(t/val[i],b[i]);
ans+=cnt;
t-=val[i]*cnt;
}
if(t==)
{
break;
}
}
if(t==)
{
return ans;
}
else
{
return inf;
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int p;
scanf("%d",&p);
int tot=;
int sum=;
for(int i=;i<;i++)
{
scanf("%d",&a[i]);
tot+=a[i];
sum+=val[i]*a[i];
}
if(sum<p)
{
printf("-1\n");
continue;
}
p=sum-p;
int ans=inf;
for(int i=;i<;i++)
{
for(int k=;k<;k++)
{
int temp=p;
memcpy(b,a,sizeof(a));
if(i)
{
if(b[])
{
temp-=val[];
b[]--;
}
else
{
continue;
}
}
if(k)
{
if(b[])
{
temp-=val[];
b[]--;
}
else
{
continue;
}
}
if(temp>=)
{
ans=min(ans,Solve(temp)+i+k);
}
}
}
if(ans==inf)
{
printf("-1\n");
}
else
{
printf("%d\n",tot-ans);
}
}
return ;
}

考虑问题的反面,求最大转化为求剩余的最小。然后从大到小贪心,能多用大面值的尽量多用。特判20,50;200,500

最新文章

  1. MyEclipse无法删除项目下的文件
  2. 如何在Global.asax中判断是否是ajax请求
  3. 根据linux内核源码查找recv返回EBADF(errno 9)的原因
  4. C#中的枚举类型(enum type)
  5. 【CSS3】---练习制作导航菜单
  6. openfire的配置
  7. InetAddress
  8. 更新yum到 163
  9. ubuntu server 安装
  10. 自己做的demo---关于java控制台输入跟类型转化跟处理异常的demo
  11. Android RatingBar自定义替换系统图片
  12. java default使用
  13. 基于Java Mail 进行发送(带附件和压缩附件)的邮件
  14. 微信小程序开发《一》:阿里云tomcat免费配置https
  15. 超简单的jQuery前台分页,不需导包
  16. cmd 创建用户,并授权管理员权限就可以远程登陆了
  17. Python内置函数(53)——repr
  18. Python3基础 time 索引值访问元组中的年月日时分秒
  19. HDU1698 Just a Hook(线段树&amp;区间覆盖)题解
  20. [Golang学习笔记] 02 命令源码文件

热门文章

  1. 剑指offer:重建二叉树
  2. web应用怎么跳过某些Filter
  3. Linux+Nginx+Asp.net Core部署
  4. CSS -- 练习之制作简单商品图
  5. Jmeter-添加检查点
  6. sass或scss入门
  7. 解决修改mysql的data_dir所引发的错误
  8. SQLServer数据库中开启CDC导致“事务日志空间被占满,原因为REPLICATION”的原因分析和解决办法
  9. 老李分享:《Linux Shell脚本攻略》 要点(二)
  10. ViewPager—01引导页的制作