• Yahoo Programming Contest 2019.D.Ears(DP)


    题目链接


    菜爆了啊QAQ

    记起点为(S),终点为(T),走过的最靠左的点是(L),最靠右的点是(R)
    那么坐标轴被分成了五段:
    (0sim L-1):经过(0)次;
    (Lsim S-1):经过偶数次;
    (Ssim T):经过奇数次;
    (T+1sim R):经过偶数次;
    (R+1siminfty):经过(0)次。
    第二段和第四段可以经过(0)次(也就是可以没有第二段或第四段)。注意如果是第二/三/四段(A_i=0)的话会有花费。
    (f[i][j])表示到(i)点,处在第(j)段,的最小花费。转移很简单。
    复杂度(O(n))


    //4ms	640KB
    #include <cstdio>
    #include <cctype>
    #include <algorithm>
    //#define gc() getchar()
    #define MAXIN 500000
    #define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
    typedef long long LL;
    const int N=2e5+5;
    
    char IN[MAXIN],*SS=IN,*TT=IN;
    
    inline int read()
    {
    	int now=0;register char c=gc();
    	for(;!isdigit(c);c=gc());
    	for(;isdigit(c);now=now*10+c-48,c=gc());
    	return now;
    }
    
    int main()
    {
    	int n=read(); LL f[5]={0};
    	for(int i=1; i<=n; ++i)
    	{
    		int ai=read();
    		LL mn=f[0]; f[0]=f[0]+ai;
    		mn=std::min(mn,f[1]), f[1]=mn+(ai?ai&1:2);
    		mn=std::min(mn,f[2]), f[2]=mn+(ai?ai+1&1:1);
    		mn=std::min(mn,f[3]), f[3]=mn+(ai?ai&1:2);
    		mn=std::min(mn,f[4]), f[4]=mn+ai;
    	}
    	printf("%lld
    ",std::min(f[2],std::min(f[3],f[4])));
    
    	return 0;
    }
    
  • 相关阅读:
    session_id 生成原理
    压缩后的数据 要经过 base64_encode 后才能在网络上传送
    MySQL ANALYZE TABLE
    mysql 优化2
    mysql 查询优化
    第归调用
    『GoLang』函数
    『GoLang』控制结构
    『GoLang』语法基础
    『Python』装饰器
  • 原文地址:https://www.cnblogs.com/SovietPower/p/10364052.html
Copyright © 2020-2023  润新知