c++&oi
usaco4.1.2
太忙没时间啰嗦,二分+dfs
要注意木板有很多大小相同的!!!
其它的自己看看
代码
/*
USER:zyn19961
TASK:fence8
LANG:C++
*/
#include
<
cstdio
>
#include
<
cstring
>
bool
can(
int
x);
bool
dfs(
int
now,
int
lp,
int
x);
void
sort(
int
x[],
int
s,
int
t);
int
n,a[
51
],p[
51
],r;
int
b[
1025
],sum[
1025
];
int
ans,tot,waste;
int
main(){
int
s,t,m;
freopen(
"
fence8.in
"
,
"
r
"
,stdin);
freopen(
"
fence8.out
"
,
"
w
"
,stdout);
scanf(
"
%d
"
,
&
n);
for
(
int
i
=
1
;i
<=
n;i
++
){
scanf(
"
%d
"
,
&
a[i]);
tot
+=
a[i];
}
scanf(
"
%d
"
,
&
r);
sum[
0
]
=
0
;
for
(
int
i
=
1
;i
<=
r;i
++
)
scanf(
"
%d
"
,
&
b[i]);
sort(a,
1
,n);
sort(b,
1
,r);
for
(
int
i
=
1
;i
<=
r;i
++
)
sum[i]
=
sum[i
-
1
]
+
b[i];
s
=
1
;t
=
r;ans
=
0
;
while
(s
<=
t){
m
=
(s
+
t
+
1
)
/
2
;
if
(can(m)){
ans
=
m;
s
=
m
+
1
;
}
else
t
=
m
-
1
;
}
printf(
"
%d\n
"
,ans);
fclose(stdin);
fclose(stdout);
return
0
;
}
void
sort(
int
x[],
int
s,
int
t){
for
(
int
i
=
s;i
<=
t;i
++
)
for
(
int
j
=
i
+
1
;j
<=
t;j
++
)
if
(x[i]
>
x[j]){
x[i]
^=
x[j];
x[j]
^=
x[i];
x[i]
^=
x[j];
}
}
bool
can(
int
x){
waste
=
0
;
for
(
int
i
=
1
;i
<=
n;i
++
)
p[i]
=
a[i];
if
(dfs(x,
0
,x))
return
true
;
else
return
false
;
}
bool
dfs(
int
now,
int
lp,
int
x){
//
int
i,j;
bool
change;
if
(now
==
0
)
return
true
;
if
(waste
+
sum[x]
>
tot)
return
false
;
if
(now
!=
x
&&
b[now]
==
b[now
+
1
])j
=
lp;
else
j
=
1
;
//
very important
for
(
int
i
=
j;i
<=
n;i
++
)
if
(p[i]
>=
b[now]){
p[i]
-=
b[now];
change
=
false
;
if
(p[i]
<
b[
1
]){
//
attention
change
=
true
;
waste
+=
p[i];
}
if
(dfs(now
-
1
,i,x))
return
true
;
if
(change)waste
-=
p[i];
p[i]
+=
b[now];
}
return
false
;
}
posted on 2012-02-18 13:54
zyn.cpp
阅读(222)
评论(0)
编辑
收藏
引用
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
<
2012年4月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
导航
C++博客
首页
新随笔
联系
聚合
管理
统计
随笔 - 57
文章 - 13
评论 - 11
引用 - 0
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
给我留言
查看公开留言
查看私人留言
随笔档案
(57)
2012年6月 (2)
2012年5月 (4)
2012年4月 (18)
2012年3月 (7)
2012年2月 (14)
2012年1月 (3)
2011年12月 (8)
2011年11月 (1)
文章档案
(13)
2012年2月 (1)
2011年12月 (7)
2011年11月 (1)
2011年9月 (3)
2011年8月 (1)
搜索
最新评论
1. re: 培训作业-第三周(STL&USACO+4)
评论内容较长,点击标题查看
--佛教网
2. re: 培训作业-第三周(STL&USACO+4)
评论内容较长,点击标题查看
--happem
3. re: NOIP2011解题报告
sum[i]表示前i个点的单位数?这。。,sum[i]表示i点前下车的乘客数吧?
--锐
4. re: NOIP2011解题报告
顶一下。。
--锐
5. re: 培训作业-第三周(STL&USACO+4)
@zyn.cpp
用vector暴力平衡树啊。。。
--姚京韬
阅读排行榜
1. NOIP2011普及组的第三题:瑞士轮(2619)
2. NOI LINUX 安装记(1970)
3. 随便说说状态压缩(1528)
4. 迎接初中同学——整理OI知识点(building)(803)
5. POJ 1733 (551)
评论排行榜
1. 培训作业-第三周(STL&USACO+4)(5)
2. NOIP2011普及组的第三题:瑞士轮(2)
3. POJ 1733 (1)
4. 给count-base sort正身(0)
5. 奇怪的乘法运算(cm)(0)
Powered by:
C++博客
Copyright © zyn.cpp