博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codeforces 269B B. Greenhouse Effect(dp)
阅读量:3710 次
发布时间:2019-05-21

本文共 869 字,大约阅读时间需要 2 分钟。

题目链接:


题目大意:

给出一个实数轴,上面散布着n个点,他们是m种,问最少挪多少步能将数轴上的点分成1~m的种类顺序排列的m块。


题目分析:

  • 首先我们能够知道,一定存在策略将某个点一次就放到它应该放的位置。
  • 所以对于我们要动位置的植物,我们最多对于每个植物只需要动一次,定义状态dp[i]代表前i个植物,要保证升序的情况下最多保留的植物的个数。
  • 转移方程很明显,
    dp[i]=max{
    dp[j]}+1,s[i]>=s[j]
  • 我们在序列的末尾添加一个种类为m+1的植物,这样我们最后保留的植物就是dp[n],然后移动的植物只需要动一次,所以n-dp[n]就是最终的答案

AC代码:

#include 
#include
#include
#include
#define MAX 5007using namespace std;int n,m,s[MAX],dp[MAX];double x;int main ( ){ while ( ~scanf ( "%d%d" , &n , &m ) ) { for ( int i = 1 ; i <= n ; i++ ) scanf ( "%d %lf" , &s[i] , &x ); s[++n] = m+1; for ( int i = 1 ; i <= n ; i++ ) { dp[i] = 0; for ( int j = 1; j < i ; j++ ) if ( s[i] >= s[j] ) dp[i] = max ( dp[i] , dp[j] ); dp[i]++; } printf ( "%d\n" , n-dp[n] ); }}

转载地址:http://yqvjn.baihongyu.com/

你可能感兴趣的文章
golang中 struct{} 和 struct
查看>>
golang json包变量不加tag
查看>>
golang:var、new、make区别及使用
查看>>
记一次goer新手的using unaddressable value错误
查看>>
gorm更新时传入结构体struct时零值被忽略
查看>>
一台主机最多保持65535个TCP连接吗?
查看>>
select和count一起使用返回一条数据
查看>>
AB实验流量正交的理解
查看>>
ubuntu安装双cuda,并进行切换
查看>>
c++ protobuf的使用
查看>>
Ubuntu16.04 wine 安装Window下的微信
查看>>
docker 清理镜像和磁盘空间命令
查看>>
ubuntu16.04 使用docker搭建镜像环境,并安装使用jupyter,实现主机访问镜像环境
查看>>
ubuntu磁盘清理
查看>>
python np.ceil()和np.repeat(),图像通道赋值的用法
查看>>
**python使用 opencv2 和udp通信进行两路相机视频的回传,以及使用pygame同时显示两路视频**
查看>>
Linux 中 find 和 vi 编辑器基本使用
查看>>
linux中压缩解压 和用户管理
查看>>
管道中的常用命令 cut sort wc uniq split tr
查看>>
Hadoop 环境搭建1
查看>>