AOJ895 艰难取舍【DP】

题目:

Description 
由于 lls 长得实在是太帅了,英俊潇洒,风流倜傥,人见人爱,花见花开,车见车载。有一群 MM 排队看 lls。每个 MM 都有自己独特的风格,由于 lls 有着一颗包容的心,所以,什么风格的 MM 他都喜欢……但是,lls 有一个特别的要求,他不希望总是看到风格得差不多的 MM,更加特别的是,如果两个 MM 风格完全一样, lls 不会有任何意见。现在, lls 希望从去看他的 MM 中,去掉一些 MM,从而使得相邻 2 个 MM 的风格值的差(绝对值)不为 1。自然地, lls 希望去掉的 MM 越少越好。

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

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

Sample Input 






1

Sample Output 
2

Hint 
N≤1000,0 ≤ ci ≤ 2000

大致思路:

问需要减去多少个人,那么可以转化为最多有多少个人满足要求。 
可以利用DP的思想求解: 
dp[i] 代表前i个人中最多留下的人数。 
则状态转移方程为:

    for(int i=1;i<=n;++i)
        for(int j=0;j<i;++j)
            if(abs(a[i]-a[j])!=1)//表示符合条件的人
                dp[i]=max(dp[i],dp[j]+1);//取最优

代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=10010;
 4 int a[maxn],dp[maxn];
 5 int main()
 6 {
 7     ios::sync_with_stdio(false);
 8     //freopen("in.txt","r",stdin);
 9     int n,ans=0;
10     cin>>n;
11     for(int i=1;i<=n;++i)
12         cin>>a[i];
13     memset(dp,0,sizeof(dp));
14     for(int i=1;i<=n;++i)
15         for(int j=0;j<i;++j)
16             if(abs(a[i]-a[j])!=1)
17                 dp[i]=max(dp[i],dp[j]+1);
18     for(int i=1;i<=n;++i)//取人数最多的情况
19         ans=max(dp[i],ans);
20     cout<<n-ans<<endl;
21     return 0;
时间: 2024-11-03 05:41:14

AOJ895 艰难取舍【DP】的相关文章

简单DP-艰难取舍

艰难取舍(seq.cpp/c/pas) [题目描述] 由于hyf长得实在是太帅了,英俊潇洒,风流倜傥,人见人爱,花见花开,车见车载.有一群MM排队看hyf.每个 MM都有自己独特的风格,由于 hyf有着一颗包容的心,所以,什么风格的MM他都喜欢…… 但是,hyf有一个特别的要求,他不希望总是看到风格得差不多的 MM,更加特别的是,如果两个MM风格完全一样,hyf不会有任何意见. 现在,hyf希望从去看他的 MM中,去掉一些MM,从而使得相邻2个 MM的风格值的差(绝对值)不为1.自然地,hyf希

poj2342 树形dp

Anniversary party Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5844   Accepted: 3354 Description There is going to be a party to celebrate the 80-th Anniversary of the Ural State University. The University has a hierarchical structure

[dp专题] AC自动机与状态压缩dp的结合

最近做到好几道关于AC自动机与状态压缩dp的结合的题,这里总结一下. 题目一般会给出m个字符串,m不超过10,然后求长度为len并且包含特定给出的字符串集合的字符串个数. 以HDU 4758为例: 把题意抽象为:给出两个字符串,且只包含两种字符 'R'.'D',现在求满足下列条件的字符串个数:字符串长度为(m+n),其中包含n个'D',m个'R'. 如果不用AC自动机来做,这道题还真没法做了,因为不管怎样都找不到正确的dp状态转移方程. 而如果引入AC自动机,把在AC自动机上的结点当做dp的一个

poj2342 Anniversary party (树形dp)

poj2342 Anniversary party (树形dp) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9128   Accepted: 5250 Description There is going to be a party to celebrate the 80-th Anniversary of the Ural State University. The University has a hierarc

[BZOJ1076][SCOI2008]奖励关解题报告|状压DP

你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再吃). 宝物一共有n种,系统每次抛出这n种宝物的概率都相同且相互独立.也就是说,即使前k-1次系统都抛出宝物1(这种情况是有可能出现的,尽管概率非常小),第k次抛出各个宝物的概率依然均为1/n. 获取第i种宝物将得到Pi分,但并不是每种宝物都是可以随意获取的.第i种宝物有一个前提宝物集合Si.只有当Si中所有

取舍已经曾经被注册那时芟除的域名

率先这小半新上网站要寄望,正在取舍域名下面没有要取舍已经曾经被注册那时芟除的域名,假如说你运用这种域名的话,被收录是很艰难的,自己能够设想一下,假如说百度引擎蛛蛛收录了网站的域名, 况且因为其余外界的启事该网站开张了,然而搜寻引擎曾经收录了某个网站,况且蛛蛛再度蒲伏该网站的时分觉察网站曾经死失踪了,那样上去蛛蛛会给个一周功夫考察某个网站能否能新生,当工夫到了,网站还没有复生,cdfcsz     搜寻引擎就会把该网站的动静清空,况且芟除域名,当你建网站的时分,你从新注册了某个域名,尔后做SEO,

第七届河南省赛10403: D.山区修路(dp)

10403: D.山区修路 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 69  Solved: 23 [Submit][Status][Web Board] Description 某山区的孩子们上学必须经过一条凹凸不平的土路,每当下雨天,孩子们非常艰难.现在村里走出来的Dr. Kong决定募捐资金重新修建着条路.由于资金有限,为了降低成本,对修好后的路面高度只能做到单调上升或单调下降. 为了便于修路,我们将整个土路分成了N段,每段路面的高度分

树形dp学习笔记

直接放例题吧: codevs1380:没有上司的舞会 题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知每个人的活跃指数和上司关系(当然不可能存在环),求邀请哪些人(多少人)来能使得晚会的总活跃指数最大. 思路: 任何一个点的取舍可以看作一种决策,那么状态就是在某个点取的时候或者不取的时候,以他为根的子树能有的最大活跃总值.分别可以用f[i,1]和f[i,0]表示第i个人来和不来. 当i来的时候,dp[i][1] += dp[

POJ1054 The Troublesome Frog [dp]

艰难的写上一篇,小学期太累了,,,很难坚持刷 #include <iostream> #include <cmath> #include <cstring> #include <cstdio> #include <cstdlib> #include <algorithm> using namespace std; int m,n; int num; struct Grid { int x,y; }grid[5555]; int cmp