zoukankan      html  css  js  c++  java
  • POJ 3670 DP LIS?

    权值为1~3 好了 此题是水题……
    i表示到了第i个数,j表示结尾的数是j
    f[i][j]=min(f[i][j],f[i-1][k]+(a[i]!=j)) 1<=k<=j
    最长上升的.

    同理我们可以再写一个g[i][j]表示最长下降的

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

    这里写图片描述

  • 相关阅读:
    Webform服务器控件调用JS
    Webfrom基础知识
    Webform用户控件
    数组练习
    整理
    SVN分支与合并
    根据经纬度,获取两点间的距离
    简单Bat文件编写
    Maven Android使用一
    Maven环境配置
  • 原文地址:https://www.cnblogs.com/SiriusRen/p/6532284.html
Copyright © 2011-2022 走看看