CF1221D Make The Fence Great Again

Posted ctyakwf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于CF1221D Make The Fence Great Again的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces 1221D - Make The Fence Great Again(DP)

D. Make The Fence Great Again

Codeforces1221D. Make The Fence Great Again(dp)

Educational Codeforces Round 73 (Rated for Div. 2) D. Make The Fence Great Again(DP)

Educational Codeforces Round 73 (Rated for Div. 2) D. Make The Fence Great Again

When one check column is selected how to make the user not to select other check columns in EXTJS gr