zoukankan      html  css  js  c++  java
  • CF1221D Make The Fence Great Again

    这题我们发现其实是dp的状态机模型,虽然我们发现一个数字可以更改多次

    但是我们只要求相邻的不同,所以一个数字最多只跳两次,因为这样就能保证相邻不同,越多没有意义且费钱

    所以我们只需三个for循环就能转移

    另外本题有几个注意点

    1.数据范围很大,所以不能用cin

    2.memset会超时,血的教训,在大量清空的情况下最好用for循环控制

    3.会爆int,这个题目有显示。

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    #include<map> 
    #include<vector> 
    using namespace std;
    typedef  long long ll;
    const int mod=1e9+7;
    const int N=5e5+10;
    const ll inf=1e18+10;
    ll a[N],b[N];
    ll f[N][3];//前i位当前位置修改几次 
    int main(){
        int t;
        scanf("%d",&t);
        while(t--){
            int n;
            scanf("%d",&n);
            int i;
            for(i=1;i<=n;i++){
                scanf("%lld%lld",&a[i],&b[i]);
            }
            for(i=0;i<=n;i++){
                for(int j=0;j<3;j++)
                f[i][j]=inf;
            }
            f[0][0]=0;
            int j,k;
            for(i=1;i<=n;i++){
                for(k=0;k<3;k++){
                    for(j=0;j<3;j++){
                        if(a[i-1]+j!=a[i]+k){
                            f[i][k]=min(f[i-1][j]+k*b[i],f[i][k]);
                        }
                    }
                }
            }
            printf("%lld
    ",min(min(f[n][0],f[n][1]),f[n][2]));
        }
    }
    View Code
  • 相关阅读:
    C
    如何让asp.net mvc 直接运行mobile页面
    Nuget找不到服务器
    C#调用R语言输出图片
    sql列转行
    C#读取注册表
    关于这个博客,关于我
    NOIP 2016 简要题解
    CSP2019 题解
    CF 练死劲
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12275867.html
Copyright © 2011-2022 走看看