【bug求调】代码很短 马蜂好看 带有注释
查看原帖
【bug求调】代码很短 马蜂好看 带有注释
763992
some_side楼主2023/8/6 20:23

WA on #7。悲。

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;

int n; long long dp[1000007][2];
//dp[i][1/0]表示 1 - i-1 的房间已经clear
//dp[i][1]表示第i个房间的boss剩一格血,等会再回来打。
//dp[i][0]表示第i个房间的boss已经GG。 
long long a[1000007], r1, r2, r3, d; 

int main() {
	scanf("%d%lld%lld%lld%lld", &n, &r1, &r2, &r3, &d);
	for(int i=1; i<=n; i++) scanf("%lld", &a[i]);
	
	dp[1][1] = min(r1*a[1]+r1, r2);
	dp[1][0] = r1*a[1]+r3;
	
	for(int i=2; i<n; i++) {
		dp[i][1] = dp[i-1][0] + d + min(r1*a[i]+r1, r2);
		long long aa = dp[i-1][1] + d + min(r1*a[i]+r1, r2) + r1 + d + r1 + d;
		//aa表示,i房间的boss先用手枪或者激光枪打到残血
		//然后去i-1房间打残血boss,再回到i房间打死boss。
		long long bb = dp[i-1][0] + d + r1*a[i] + r3;
		long long cc = dp[i-1][1] + d + r1*a[i] + r3 + d + r1 + d;
		//cc表示,第i个房间的boss直接用AWP打死,然后去i-1房间打残血boss,然后再回来。 
		dp[i][0] = min(aa, bb);
		dp[i][0] = min(cc, dp[i][0]);
	}
	if(n>1) {
		long long aa = dp[n-1][1] + d + min(r1*a[n]+r1, r2) + d + r1 + d + r1;
		long long bb = dp[n-1][0] + d + r1*a[n] + r3;
		long long cc = dp[n-1][1] + d + r1*a[n] + r3 + d + r1;
		//cc表示游戏结束在n-1房间。 
		dp[n][0] = min(aa, bb);
		dp[n][0] = min(cc, dp[n][0]); 
	}
	cout<<dp[n][0]<<endl;
	
	return 0;
}
2023/8/6 20:23
加载中...