1082: [SCOI2005]栅栏

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 2430  Solved: 1034
[Submit][Status][Discuss]

Description

  农夫约翰打算建立一个栅栏将他的牧场给围起来,因此他需要一些特定规格的木材。于是农夫约翰到木材店购
买木材。可是木材店老板说他这里只剩下少部分大规格的木板了。不过约翰可以购买这些木板,然后切割成他所需
要的规格。而且约翰有一把神奇的锯子,用它来锯木板,不会产生任何损失,也就是说长度为10的木板可以切成长
度为8和2的两个木板。你的任务:给你约翰所需要的木板的规格,还有木材店老板能够给出的木材的规格,求约翰
最多能够得到多少他所需要的木板。

Input

  第一行为整数m(m<= 50)表示木材店老板可以提供多少块木材给约翰。紧跟着m行为老板提供的每一块木板的长
度。接下来一行(即第m+2行)为整数n(n <= 1000),表示约翰需要多少木材。接下来n行表示他所需要的每一块木板
的长度。木材的规格小于32767。(对于店老板提供的和约翰需要的每块木板,你只能使用一次)。

Output

  只有一行,为约翰最多能够得到的符合条件的木板的个数。

Sample Input

4
30
40
50
25
10
15
16
17
18
19
20
21
25
24
30

Sample Output

7

HINT

25切出 21 30切出 20 40切出 19、18 50切出 15、16、17

 #include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int m,n;
int re[];
int a[],b[];
int sum,ned;
int waste=;
bool dfs(int now,int st) {
if(now==) return ;
if(waste+ned>sum) return ;
for(int i=st;i<=m;i++) {
if(a[i]>=b[now])
{
a[i]-=b[now];
if(a[i]<b[]) waste+=a[i];
if(b[now]==b[now-]) {if(dfs(now-,i)) return ;}
else if(dfs(now-,)) return ;
if(a[i]<b[]) waste-=a[i];
a[i]+=b[now];
}
}
return ;
}
bool check(int mid) {
ned=;waste=;
for(int i=;i<=mid;i++) ned+=b[i];
for(int i=;i<=m;i++) a[i]=re[i];
return dfs(mid,);
}
int main() {
scanf("%d",&m);
for(int i=;i<=m;i++){scanf("%d",&re[i]);sum+=re[i];}
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&b[i]);
sort(a+,a+m+);
sort(b+,b+n+);
int l=,r=n;
while(l<=r) {
int mid=(l+r)>>;
if(check(mid)) l=mid+;
else r=mid-;
}
printf("%d",l-);
}

最新文章

  1. java2
  2. javascript 的事件--阻止冒泡
  3. Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
  4. OpenJudge计算概论-配对碱基链
  5. Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent
  6. 【C语言】reverse_string(char * string)(递归)
  7. C++ 拷贝控制和资源管理,智能指针的简单实现
  8. 房上的猫:HTML5基础
  9. MongoDB之副本集
  10. EF 查询视图出现重复数据
  11. Java:API文档;文档注释中的javadoc标记;官方API;自己动手给项目建一个API文档
  12. python3 切片
  13. axd文件
  14. open-falcon ---安装Dashboard时候报错&quot;SSLError: The read operation timed out&quot;
  15. Asp.net Mvc action返回多个模型实体给view
  16. div中 li宽度不固定 ie6和ie7不兼容不自动换行
  17. XXX on tree
  18. MySQL 中联合查询效率分析
  19. matplotlib-绘制精美的图表
  20. smarty 教程 及 常用点

热门文章

  1. 《数据结构》C++代码 Splay
  2. sqlalchemy 查询姿势总结
  3. Leetcode 661.图片平滑器
  4. Android之测试相关知识点
  5. 服务器tomcat配置教程
  6. python完成留言板功能
  7. beta版本前准备
  8. selenium webdriver——JavaScript警告窗处理
  9. Java服务器端消息队列实战
  10. vi - vim的一些遗忘点