zoukankan      html  css  js  c++  java
  • 【DP复习】线性dp ouo

    P1091 合唱队形

    正序逆序各求一遍LIS 

    枚举每个人, 计算以他为中心点左右个需要移走多少人, 相加, 最终取min即可

    不知道为什么我的总是比答案小一qaq

    测试了一组样例, 显然应该输出0, 但我的输出"-1", 所以最终输出ans+1 qwq

    1 5
    2 1 2 3 2 1

    代码君qwq

     1 #include<cstdio>
     2 #include<iostream>
     3 using namespace std;
     4 const int sz = 110;
     5 int n, ans = 1<<30;
     6 int f[sz], lis1[sz], lis2[sz];
     7 int main() {
     8     scanf("%d", &n);
     9     for(int i = 1; i <= n; i++) 
    10         scanf("%d", &f[i]);
    11     for(int i = 1; i <= n; i++) {
    12         lis1[i] = 1;
    13         for(int j = 1; j < i; j++) {
    14             if(f[j] < f[i] && lis1[j] + 1 > lis1[i])
    15                 lis1[i] = lis1[j] + 1;
    16         }
    17 //        printf("lis1[%d]: %d
    ", i, lis1[i]);
    18     }
    19 //    cout<<endl;
    20     for(int i = n; i >= 1; i--) {
    21         lis2[i] = 1;
    22         for(int j = n; j > i; j--) {
    23             if(f[j] < f[i] && lis2[j] + 1 > lis2[i])
    24                 lis2[i] = lis2[j] + 1;
    25         }
    26 //        printf("lis2[%d]: %d
    ", i, lis2[i]);
    27     }
    28     for(int i = 1; i <= n; i++) {
    29         int mid = 0;
    30         mid  = (i - lis1[i]) + (n - i - lis2[i]);
    31         if(mid < ans) ans = mid;
    32     }
    33     printf("%d", ans+1);
    34     return 0;
    35 }     
  • 相关阅读:
    微信小程序 editor富文本
    vuex详解
    每日一练
    如何有效地进行代码 Review?
    vue实现瀑布流
    浅谈js防抖和节流-转载
    Java Kafka 消费积压监控
    用于文本内容的复制粘贴
    Java 键值对数据本地保存与读取
    Java ElasticSearch 操作
  • 原文地址:https://www.cnblogs.com/Hwjia/p/9876221.html
Copyright © 2011-2022 走看看