会员
周边
众包
新闻
博问
闪存
赞助商
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式
...
退出登录
注册
登录
代码改变世界
Cnblogs
Dashboard
Login
Home
Contact
Gallery
Subscribe
RSS
一切随心
编程菜园
最长合法序列
2006-11-05 17:59
老博客哈
阅读(
601
) 评论(
2
)
编辑
收藏
举报
/**/
/*
http://acm.hnu.cn
:8080/online/?action=problem&type=show&id=10179
*/
#include
<
iostream
>
using
namespace
std;
int
GetMax(
int
B[],
int
len)
{
int
max
=
B[
0
];
for
(
int
i
=
1
; i
<
len; i
++
)
{
if
(B[i]
>
max)
max
=
B[i];
}
return
max;
}
int
main()
{
int
n;
long
long
A[
1001
];
int
len;
int
i, j;
cin
>>
n;
while
(n
--
)
{
cin
>>
len;
int
B[
1001
]
=
{
0
}
;
for
(i
=
0
; i
<
len; i
++
)
cin
>>
A[i];
for
(i
=
1
; i
<
len; i
++
)
{
for
(j
=
i
-
1
; j
>=
0
; j
--
)
{
if
(A[i]
>=
A[j])
{
if
(B[i]
<=
B[j])
{
B[i]
=
B[j]
+
1
;
}
}
}
}
cout
<<
GetMax(B, len)
+
1
<<
endl;
}
return
0
;
}
经典dp问题,记B[i]为以当前数字作为结尾的最长序列的长度,
则 B[i] = max{B[0..i-1]} + 1 前提是A[i]的数字要比该位上的数大。
会员力量,点亮园子希望
刷新页面
返回顶部
About