zoukankan      html  css  js  c++  java
  • POJ 3671 DP or 乱搞

    思路:
    1.DP f[i][j]:前i个数 最后一个数是j的最小花费
    f[i][j]=min(f[i][j],f[i-1][k]+(a[i]!=j));1<=k<=j
    这种做法比较有普遍性…
    2.
    直接枚举断点乱搞不就行了嘛…
    枚举在哪儿转折成的2 (注意全是1或者全是2的情况就OK了)

    //By SiriusRen
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    int n,a[55555],f[55555][2];
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        memset(f,0x3f,sizeof(f)),f[0][1]=f[0][2]=0;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=2;j++)
                for(int k=1;k<=j;k++)
                    f[i][j]=min(f[i][j],f[i-1][k]+(a[i]!=j));
        printf("%d
    ",min(f[n][2],f[n][1]));
    }
    //By SiriusRen
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    int n,a[55555],vis[55555],cnt;
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
            if(a[i]==1)cnt++;
            vis[i]=cnt; 
        }
        int ans=cnt;
        for(int i=1;i<=n;i++)ans=min(ans,cnt-vis[i]+i-vis[i]);
        printf("%d
    ",ans);
    }

    这里写图片描述

  • 相关阅读:
    MySQL基础_常见命令
    数据库概述
    Nginx学习笔记
    华为OSPF基础配置实验
    华为RIPv2实验
    华为三层交换实验
    web-debug-server
    花一天时间试玩vsphere6.7(EXSI)服务器版的vmware
    haproxy+keepalived练习
    mailx加163邮箱发邮件
  • 原文地址:https://www.cnblogs.com/SiriusRen/p/6532280.html
Copyright © 2011-2022 走看看