当前位置: 首页 > news >正文

POJ-1836 Alignment DP

题目意思很好懂,就是问最少出来多少个是的队中的每一个人都能够看到最左边或者是最右边。

我们通过枚举没一点作为最高点来求解这个问题,有个要注意的地方就是最高点其实允许有两个,即一个往左看,一个往右看。所以我们就只能够去枚举到左边的最高点,通过搜索去找右边的最高点(这个最高点只要满足高度小于等于我们枚举的点即可)。

代码如下:

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <string>
#include <map>
#include <queue>
#include <vector>
#include <stack>
#include <list>
#include <set>
#define MAXN 1000
using namespace std;

int N, L[MAXN+5], R[MAXN+5], seq[MAXN+5];

int cp(int x) {
    int p = x + 1;
    while (seq[p] < seq[x] && p <= N) ++p;
    if (p != N+1) return R[p]+2;
    return R[x]+1;
}

void solve() {
    int ret = 0x7fffffff;
    memset(L, 0, sizeof (L));
    memset(R, 0, sizeof (R));
    for (int i = 1; i <= N; ++i) {
        for (int j = 1; j < i; ++j) {
            if (seq[j] < seq[i]) {
                L[i] = max(L[i], L[j]+1);
            }
        }
    }
    for (int i = N; i >= 1; --i) {
        for (int j = i+1; j <= N; ++j) {
            if (seq[j] < seq[i]) {
                R[i] = max(R[i], R[j]+1);
            }    
        }
    }
    for (int i = 1; i <= N; ++i) {
        ret = min(ret, N-(L[i]+cp(i)));
    }
    printf("%d\n", ret);
}

int main()
{
    double x;
    while (scanf("%d", &N) == 1) {
        for (int i = 1; i <= N; ++i) {
            scanf("%lf", &x);
            seq[i] = int(x*100000);
        }
        solve();
    }
    return 0;
}

相关文章:

  • C#中Struct与Class的区别(转)
  • 被吹大的微信营销不靠谱
  • 图标控件Highcharts使用指南
  • vue自定义指令实现v-tap插件
  • 如何从页面中获取url参数
  • 在.NET中使用自定义约定
  • 存储-RAID简介
  • Linux系统搭建yum仓库
  • 子网划分讲解及练习(二)
  • POJ 1185 炮兵
  • 【转】一步一步学Linq to sql(一):预备知识
  • ios5 编程关于@synthesize window = _window的理解
  • iOS UI基础-18.0 UIView
  • [你必须知道的.NET]第十四回:认识IL代码---从开始到现在
  • AMD规范与CMD规范的区别是什么?
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • ES6--对象的扩展
  • LeetCode29.两数相除 JavaScript
  • magento2项目上线注意事项
  • oldjun 检测网站的经验
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • scrapy学习之路4(itemloder的使用)
  • vuex 学习笔记 01
  • vue自定义指令实现v-tap插件
  • web标准化(下)
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 从重复到重用
  • 记一次和乔布斯合作最难忘的经历
  • 前端知识点整理(待续)
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 找一份好的前端工作,起点很重要
  • Android开发者必备:推荐一款助力开发的开源APP
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​Python 3 新特性:类型注解
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (1)虚拟机的安装与使用,linux系统安装
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (三)docker:Dockerfile构建容器运行jar包
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • ./configure,make,make install的作用(转)
  • .Net 4.0并行库实用性演练
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET Core WebAPI中封装Swagger配置
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .Net7 环境安装配置
  • .net访问oracle数据库性能问题
  • /bin/bash^M: bad interpreter: No such file ordirectory