【♂Not The Triumph♂O(∩_∩)O哈哈~But The Struggle♂】

竞赛决不是捷径,它只是另一种艰辛的生活方式。得到与失去,只有时间会去评判;成功与失败,只有历史能去仲裁。我不会永远成功,正如我不会永远失败一样

  C++博客 :: 首页 :: 联系 ::  :: 管理
  6 Posts :: 239 Stories :: 25 Comments :: 0 Trackbacks

常用链接

留言簿(7)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 108444
  • 排名 - 229

最新评论

阅读排行榜

评论排行榜

为了增加顾客,Sally的店铺决定提供免费午餐,顿时门庭若市,但是不久Sally的原材料不足了….因此Sally决定公布一项决定:凡是来本店吃免费午餐的,一天吃能吃一次,吃的数量必须比上一次吃的少, 点的必须在上一次后面,且免费午餐将只有N个种类任君选择,为了能吃到最多的免费午餐,你将如何安排每日吃的数量呢?

input:
第一行一个数N,表示免费午餐的种类(0<=N<=100000)
第二行N个数,表示每个免费午餐的数量(0<=数量<=100000)

output:
一个数,表示最多能吃多少天

input:
5
5 4 3 2 1

outpu:
5

【参考程序】:

#include<stdio.h>
#include
<stdlib.h>
#include
<string.h>
using namespace std;
int
 n,i,j,ans,low,high;
int a[100010],b[100010
];
int
 main()
{
    scanf(
"%d",&
n);
    
for (i=1;i<=n;i++) scanf("%d",&
a[i]);
    ans
=0
;
    
for (i=n;i>=1;i--
)
    {
        
if (a[i]==0continue
;
        low
=1;high=
ans;
        
while (low<=
high)
        {
            
int mid=(low+high)/2
;
            
if (b[mid]<a[i]) low=mid+1
;
            
else high=mid-1
;
        }
        
if (low>ans) ans++
;
        b[low]
=
a[i];
    }
    printf(
"%d\n"
,ans);
    system(
"pause"
);
    
return 0
;
}
posted on 2009-03-29 08:32 开拓者 阅读(290) 评论(0)  编辑 收藏 引用 所属分类: 动态规划&背包

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理