zoukankan      html  css  js  c++  java
  • Codeforces Round #612 (Div. 2)C. Garland

    第四次写题解,请多指教!

    http://codeforces.com/contest/1287/problem/C题目链接

    题目大意是有一个数字串挂有1-n n个数字,现在上面缺失了一些数字,让你找出使得复杂度最低的填补方式,求出最低复杂度。

    数据量只有100;显然可以用dp来做;创建一个四维dp[i][j][k][2] i表示数组下标,j表示剩余偶数,k表示剩余奇数最后一维存当前下标要取奇数还是偶数;

    显然状态转移方程可以写成

     1     if(a[i]==0){
     2             dp[i][j][k][1]=min(dp[i-1][j][k+1][0]+1,dp[i-1][j][k+1][1]);
     3             dp[i][j][k][0]=min(dp[i-1][j+1][k][0],dp[i-1][j+1][k][1]+1);
     4                 }
     5     else if(a[i]%2){
     6                     dp[i][j][k][1]=min(dp[i-1][j][k+1][0]+1,dp[i-1][j][k+1][1])
     7                 }
     8     else {
     9             dp[i][j][k][0]=min(dp[i-1][j+1][k][0],dp[i-1][j+1][k][1]+1);
    10                 }    

    最后的答案将会是奇书偶数剩余量都为0的情况第n位取奇数或者偶数时较小的那个上代码

    #include<bits/stdc++.h>
    using namespace std;
    int dp[105][105][105][2];
    int a[105];
    int main()
    {
        int n;
        cin>>n;
        for(int i=1;i<=n;i++) cin>>a[i];
        int ou,qi;
        if(n%2){ou=n/2;qi=n/2+1;}
        else{ou=n/2;qi=n/2;}
        for(int i=0;i<=n+1;i++)
        for(int j=0;j<=ou+1;j++)
        for(int k=0;k<=qi+1;k++)
        dp[i][j][k][0]=dp[i][j][k][1]=1005;
        dp[0][ou][qi][0]=dp[0][ou][qi][1]=0;
        for(int i=1;i<=n;i++)
        {
            for(int j=0;j<=ou;j++)
            {
                for(int k=0;k<=qi;k++)
                {
                    if(a[i]==0){
                        dp[i][j][k][1]=min(dp[i-1][j][k+1][0]+1,dp[i-1][j][k+1][1]);
                        dp[i][j][k][0]=min(dp[i-1][j+1][k][0],dp[i-1][j+1][k][1]+1);
                    }
                    else if(a[i]%2)
                    {
                        dp[i][j][k][1]=min(dp[i-1][j][k+1][0]+1,dp[i-1][j][k+1][1]);
                    }
                    else 
                    {
                        dp[i][j][k][0]=min(dp[i-1][j+1][k][0],dp[i-1][j+1][k][1]+1);
                    }
                }
            }
        }
        cout<<min(dp[n][0][0][0],dp[n][0][0][1]);
    }
    rush!
  • 相关阅读:
    几款国产的安卓系统
    微软所有正版软件下载网站ITELLYOU
    微软所有正版软件下载网站ITELLYOU
    键盘大小写状态显示(Softswitch) v2.3汉化绿色版
    牛顿定律的一些思考
    查看接地有没有ok
    Adobe Audition CC 2018软件安装
    声音的掩蔽效应的一些思考
    声学测量的基本量
    The Mean of the Sample Mean|Standard Deviation of the Sample Mean|SE
  • 原文地址:https://www.cnblogs.com/LH2000/p/12385505.html
Copyright © 2011-2022 走看看