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!
  • 相关阅读:
    scrapy爬虫系列之三--爬取图片保存到本地
    scrapy爬虫系列之四--爬取列表和详情
    python3.7.2 ssl版本过低导致pip无法使用的问题
    python3安装后无法使用退格键的问题
    位运算符和unity Layers
    unity常用小知识点
    unity -- Time类(持续更新中)
    随便说说 post-processing
    unity图片后期处理
    顶点/片元 shader 总结
  • 原文地址:https://www.cnblogs.com/LH2000/p/12385505.html
Copyright © 2011-2022 走看看