艰难取舍(seq.cpp/c/pas)

【题目描述】

由于hyf长得实在是太帅了,英俊潇洒,风流倜傥,人见人爱,花见花开,车见车载。有一群MM排队看hyf。每个 MM都有自己独特的风格,由于 hyf有着一颗包容的心,所以,什么风格的MM他都喜欢……

但是,hyf有一个特别的要求,他不希望总是看到风格得差不多的 MM,更加特别的是,如果两个MM风格完全一样,hyf不会有任何意见。

现在,hyf希望从去看他的 MM中,去掉一些MM,从而使得相邻2个 MM的风格值的差(绝对值)不为1。自然地,hyf希望去掉的MM越少越好。

【输入格式】

第一行一个整数N;

第 2~N+1行N 个整数,第i个为 ci。表示第i个MM的风格值。

【输出格式】

一个数,表示最少要去掉的 MM数。

【样例输入1】

6

4

2

2

1

1

1

【样例输出1】

2

【数据范围】

对于30%的数据,N≤20

对于70%的数据,N≤100,ci ≤ 2000

对于100%的数据,N≤1000   0 ≤ ci ≤ 2000

  这道题可以用动态规划的算法来解决。用数组F[i]来表示从第1个到第i个数最多可以留下几个。

  那么显然F[i]可以由F[j](1<=j<=i-1)加1推得。即当前最优情况下与第i个数相邻的是第j个数,并且这里的j要满足i和j的差绝对值不为1。则F[i]=max{F[j]}+1,且|a[i]-a[j]|<>1。这个算法的时间复杂度为O(n^2)。

  另外,可以发现a[j]与a[i]不能相邻的情况只有a[j]=a[i]+1和a[j]=a[i]-1。所以,不需穷举1到i-1,只需找出1到i-1中最大的3个F[j]即可,其中必须确保F[j]不彼此相等,这样满足条件的max{F[j]}必然是在这3个F[j]中,这样就可将算法的时间复杂度缩小到O(3N)。

  这道题也可以用暴力枚举来实现,对于一个序列a1,a2,a3…an,可以]用一个数组b[a[i]]来记录到达a[i]的最大存在个数。通过枚举存在2个,3个,4个…n个人时的最大值来取得。

  例:一开始只存在a1和a2,a3…an中的任意一个时的最大值放在b[a[i]]中,然后再搜索只存在3个人时a1,a2和a3,a4….an中的任意一个时的最大值,由于a1,a2两个人的最大值已存在b[a[2]]中了,所以只要寻找a2和a3,a4…an中任意一个的最大值即可,比较b[a[i]]是否大于b[a[2]]+1,并将结果放在b[a[i]]中。同理依次枚举至n个人为止。最后在b[1]…b[n]中找出最大值即可。

    for i:=1 to n do//枚举每次存在从a[1]开始的i个人

            for j:=i+1 to n do//更新前i个人和到第j个人之间的最大人数

               if (abs(c[j]-c[i])<>1) and (s[i]+1>s[j]) then s[j]:=s[i]+1;

AC_code:

var
j,i,n,maxs:longint;
c,f:array[..] of longint;
function max(a,b:longint):longint;
begin
if a>b then exit(a);
exit(b);
end;
begin
assign(input,'seq.in');
assign(output,'seq.out');
reset(input);rewrite(output);
readln(n);
for i:= to n do readln(c[i]);
for i:= to n do begin
f[i]:=;
for j:= to i- do
if abs(c[j]-c[i])<> then f[i]:=max(f[i],f[j]+);
end;
maxs:=-;
for i:= to n do if f[i]>maxs then maxs:=f[i];
writeln(n-maxs);
close(input);close(output);
end.

简单DP-艰难取舍的更多相关文章

  1. HDU 1087 简单dp,求递增子序列使和最大

    Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  2. Codeforces Round #260 (Div. 1) A. Boredom (简单dp)

    题目链接:http://codeforces.com/problemset/problem/455/A 给你n个数,要是其中取一个大小为x的数,那x+1和x-1都不能取了,问你最后取完最大的和是多少. ...

  3. codeforces Gym 100500H A. Potion of Immortality 简单DP

    Problem H. ICPC QuestTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100500/a ...

  4. 简单dp --- HDU1248寒冰王座

    题目链接 这道题也是简单dp里面的一种经典类型,递推式就是dp[i] = min(dp[i-150], dp[i-200], dp[i-350]) 代码如下: #include<iostream ...

  5. poj2385 简单DP

    J - 简单dp Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:65536KB     64bit ...

  6. hdu1087 简单DP

    I - 简单dp 例题扩展 Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     ...

  7. poj 1157 LITTLE SHOP_简单dp

    题意:给你n种花,m个盆,花盆是有顺序的,每种花只能插一个花盘i,下一种花的只能插i<j的花盘,现在给出价值,求最大价值 简单dp #include <iostream> #incl ...

  8. hdu 2471 简单DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2571 简单dp, dp[n][m] +=(  dp[n-1][m],dp[n][m-1],d[i][k ...

  9. Codeforces 41D Pawn 简单dp

    题目链接:点击打开链接 给定n*m 的矩阵 常数k 以下一个n*m的矩阵,每一个位置由 0-9的一个整数表示 问: 从最后一行開始向上走到第一行使得路径上的和 % (k+1) == 0 每一个格子仅仅 ...

  10. poj1189 简单dp

    http://poj.org/problem?id=1189 Description 有一个三角形木板,竖直立放.上面钉着n(n+1)/2颗钉子,还有(n+1)个格子(当n=5时如图1).每颗钉子和周 ...

随机推荐

  1. 在python正在使用mysql

    缘由 近期在折腾一个小东西须要抓取网上的页面.然后进行解析.将结果放到数据库中. 了解到Python在这方面有优势,便选用之. 由于我有台server上面安装有mysql,自然使用之.在进行数据库的这 ...

  2. ArcMap合并之路 -- 该段路合并成一个完整的路

    #1: 用 Arctoolbox\Data Management Tools\Generalization\dissolve 工具 #2: Options:dissolve field 项选" ...

  3. 将cocos2dx+lua创建的游戏port到windows phone

    在整个Port的过程中遇到的问题总结例如以下 1.一定要使用最新版本号的cocos2dx,原因大家看一下changelog就知道了,近期的cocos2dx版本号都是在修windows phone上的b ...

  4. HDU 4333 Revolving Digits 扩张KMP

    标题来源:HDU 4333 Revolving Digits 意甲冠军:求一个数字环路移动少于不同数量 等同 于的数字 思路:扩展KMP求出S[i..j]等于S[0..j-i]的最长前缀 推断 nex ...

  5. ffmpeg和opencv 播放视频文件和显示器

    ffmpeg它是基于最新版本,在官网下载http://ffmpeg.zeranoe.com/builds/.编译时VS2010配置相关头文件及库的路径就可以.opencv的搭建參考上一个博客. 首先简 ...

  6. Windows编译Nodejs时遇到 File "configure", line 313 SyntaxError: invalid syntax Failed to create vc project files. 时的解决方法

    第一次编译的时候电脑上未安装python,遂下载了python最新版本3.3.3,但是报了下面这个错误. 把python降到2.7.*的版本即可. 我这里测试2.7.6和2.7.3版本可以正常编译.

  7. 深入理解Linux修改hostname(转)

    当我觉得对Linux系统下修改hostname已经非常熟悉的时候,今天碰到了几个个问题,这几个问题给我好好上了一课,很多知识点,当你觉得你已经掌握的时候,其实你了解的还只是皮毛.技术活,切勿浅尝则止! ...

  8. NSIS:禁止选择安装路径和编辑安装目录

    原文 NSIS:禁止选择安装路径和编辑安装目录 如果你想在安装包中禁止用户选择安装路径和编辑安装目录,有两种方式.   第一种:注释或删除安装目录选择页面 1 ;!insertmacro MUI_PA ...

  9. OAuth和OpenID的区别(转)

    OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用.  OAuth协议为用户资源的授权提 ...

  10. ubuntu下安装myeclipse

    一.下载myeclipse 官网下载:http://www.myeclipseide.com/ 我使用的是myeclipse pro 2014.run,重命名为myeclipse.run 示例路径:/ ...