二分答案,dfs判断是否可行,当b[k]==b[k-1]时可以剪枝也就是后移枚举位置

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1005;
int n,a[N],m,b[N],sum,s[N],re,mid,t[N];
bool dfs(int k,int x)
{
if(k<=0)
return 1;
if(s[mid]+re>sum)
return 0;
for(int i=x;i<=m;i++)
if(t[i]>=b[k])
{
t[i]-=b[k];
if(t[i]<b[1])
re+=t[i];
if(b[k]==b[k-1])
{
if(dfs(k-1,i))
return 1;
}
else if(dfs(k-1,1))
return 1;
if(t[i]<b[1])
re-=t[i];
t[i]+=b[k];
}
return 0;
}
int main()
{
scanf("%d",&m);
for(int i=1;i<=m;i++)
scanf("%d",&a[i]),sum+=a[i];
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&b[i]);
sort(a+1,a+1+m);
sort(b+1,b+1+n);
for(int i=1;i<=n;i++)
s[i]=s[i-1]+b[i];
while(b[n]>a[m])
n--;
int l=0,r=n,ans=0;
while(l<=r)
{
mid=(l+r)>>1;
re=0;
for(int i=1;i<=n;i++)
t[i]=a[i];
if(dfs(mid,1))
l=mid+1,ans=mid;
else
r=mid-1;
}
printf("%d\n",ans);
return 0;
}

最新文章

  1. WSTMall网站系统最新官方版
  2. HDOJ 3853 LOOPS
  3. poj2492(种类并查集/各种解法)
  4. [原创]C#按比例缩放窗体控件及字体
  5. Quartus II中FPGA的管脚分配保存方法
  6. VBS基础篇 - 过程(sub 与 Function)
  7. JS验证框架(exValidation)
  8. 详解 MySQL 中的 explain
  9. 打开链接(C# / 默认浏览器)
  10. ACM1019_最大公倍数
  11. 用MVC4练习,后台用aspx,数据库DemoDb《MvcUserDemo》
  12. Microsoft dotnetConf 2015
  13. Eclipse中如何显示代码行
  14. Python shelve模块的使用方法
  15. MVC中Model元数据及绑定机制
  16. day44 mysql高级部分内容
  17. Python交互图表可视化Bokeh:4. 折线图| 面积图
  18. numpy meshgrid函数
  19. flask框架詳解
  20. mybatis @Select注解中如何拼写动态sql

热门文章

  1. Java 实现原型(Prototype)模式
  2. webform的操作完之后返回主页面的行定位
  3. WPF窗口最大化
  4. Material Design (四),AppBarLayout的使用
  5. jquery easyui:EasyUI Treegrid 树形网格
  6. RedHat 安装Hadoop并运行wordcount例子
  7. bash shell最基本的语法
  8. O4编译 在 PingCAP 的一些技术挑战
  9. linux内存操作--ioremap和mmap
  10. import data from excel to sql server