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;
	}
}
上一篇:14行代码满分:1037 在霍格沃茨找零钱 (20分)


下一篇:ABC 210