zoukankan      html  css  js  c++  java
  • 洛谷 P1564 膜拜

    题目传送门

    解题思路:

    把甲的崇拜者设为-1,乙的崇拜者设为1,求前缀和,f[i]表示到第i个人所需的最少机房数.

    AC代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 
     6 using namespace std;
     7 
     8 int n,m,a[2501],j,y,f[2501],sum[2501];
     9 
    10 int main() {
    11     memset(f,0x3f3f3f,sizeof(f));
    12     scanf("%d%d",&n,&m);
    13     for(int i = 1;i <= n; i++) {
    14         scanf("%d",&a[i]);
    15         if(a[i] == 2) sum[i] = sum[i-1] - 1;
    16         else sum[i] = sum[i-1] + 1; 
    17     }
    18     f[0] = 0;
    19     for(int i = 1;i <= n; i++)
    20         for(int j = 1;j <= i; j++)
    21             if(abs(sum[i] - sum[j-1]) == i - j + 1 || abs(sum[i] - sum[j-1]) <= m)
    22             //这一段全相同或两种人数相差不超过m 
    23                 f[i] = min(f[i],f[j-1] + 1);
    24     printf("%d",f[n]);
    25     return 0;
    26 }
  • 相关阅读:
    Working with nil
    Determining Equality of Objects
    NSLog中的%@
    ld
    恢复HDFS误删数据
    一个缓冲区溢出示例
    SpringBoard
    Symbol Table
    feof使用注意
    -g vs -rdynamic
  • 原文地址:https://www.cnblogs.com/lipeiyi520/p/12386736.html
Copyright © 2011-2022 走看看