其他分享
首页 > 其他分享> > CF1221D Make The Fence Great Again(DP)

CF1221D Make The Fence Great Again(DP)

作者:互联网

题目传送门

这道题其实也分析出来了,就是dp[n][3]的一个空间,最多修2个单位长度,最少不修,状态转移其实不难,但是这道题做成了dp大讨论(哭)。

#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
ll dp[355555][3];
ll a[2102100];
ll b[2102100];
int main(){
	int T;
	cin>>T;
	while(T--){
		int n;
		cin>>n;
		for(int i=1;i<=n;i++){
			scanf("%lld %lld",a+i,b+i);
			dp[i][0]=dp[i][1]=dp[i][2]=1e18;	
		}
		dp[1][0]=0;
		dp[1][1]=b[1];
		dp[1][2]=2*b[1];
		for(int i=2;i<=n;i++){
			for(int j=0;j<=2;j++){
				for(int k=0;k<=2;k++){
					if(a[i-1]+j!=a[i]+k){
						dp[i][k]=min(dp[i][k],dp[i-1][j]+k*b[i]);
					}
				}
			}
		}
		cout<<min(dp[n][2],min(dp[n][1],dp[n][0]))<<endl;
	}
}

标签:Again,Great,Fence,int,ll,long,include,dp,lld
来源: https://blog.csdn.net/m0_51841071/article/details/118805516