zoukankan      html  css  js  c++  java
  • [IOI2007]Miners 矿工配餐

    link

    其实就是一个比较简单的$IOI$题。简单$dp$就行,设$5$维$dp$即可

    最后在滚动一下,判一下可行性即可。

    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<cstdio>
    using namespace std;
    inline int read(){
        int f=1,ans=0;char c=getchar();
        while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9'){ans=ans*10+c-'0';c=getchar();}
        return f*ans;
    }
    const int N=3;
    int dp[N][4][4][4][4];
    int val[100001],A[5];
    int calc(int a,int b,int c){
        A[1]=a,A[2]=b,A[3]=c;sort(A+1,A+3+1);
        int res=(A[1]!=0);
        if(A[2]!=A[1]&&A[2]) res++;
        if(A[3]!=A[2]&&A[3]) res++;
        return res;
    }
    int maxn;
    int cur;
    int main(){
        cur=0;
        memset(dp,-1,sizeof(dp));dp[0][0][0][0][0]=0;
        int n=read();
        for(int i=1;i<=n;i++){char str=getchar();if(str=='M') val[i]=1;if(str=='F')val[i]=2;if(str=='B') val[i]=3;}
        for(int i=1;i<=n;i++){
            cur^=1;
            for(int t1=0;t1<=3;t1++)
                for(int t2=0;t2<=3;t2++)
                    for(int t3=0;t3<=3;t3++)
                        for(int t4=0;t4<=3;t4++){
                            if(dp[cur^1][t1][t2][t3][t4]==-1) continue;
                            dp[cur][t2][val[i]][t3][t4]=max(dp[cur][t2][val[i]][t3][t4],dp[cur^1][t1][t2][t3][t4]+calc(t1,t2,val[i]));
                            dp[cur][t1][t2][t4][val[i]]=max(dp[cur][t1][t2][t4][val[i]],dp[cur^1][t1][t2][t3][t4]+calc(t3,t4,val[i]));
                        }
            memset(dp[cur^1],-1,sizeof(dp[cur^1]));
        }
        for(int t1=0;t1<=3;t1++)
            for(int t2=0;t2<=3;t2++)
                for(int t3=0;t3<=3;t3++)
                    for(int t4=0;t4<=3;t4++) if(dp[cur][t1][t2][t3][t4]!=-1)maxn=max(maxn,dp[cur][t1][t2][t3][t4]);
        cout<<maxn;
    }
    View Code
  • 相关阅读:
    37. Sudoku Solver(js)
    36. Valid Sudoku(js)
    35. Search Insert Position(js)
    34. Find First and Last Position of Element in Sorted Array(js)
    33. Search in Rotated Sorted Array(js)
    32. Longest Valid Parentheses(js)
    函数的柯里化
    俞敏洪:我和马云就差了8个字
    vue路由传值params和query的区别
    简述vuex的数据传递流程
  • 原文地址:https://www.cnblogs.com/si-rui-yang/p/10087515.html
Copyright © 2011-2022 走看看