比赛 NOIP2007普及组(复现) 评测结果 AAAAAAAAAA
题目名称 守望者的逃离 最终得分 100
用户昵称 AGNING 运行时间 0.012 s
代码语言 C++ 内存使用 15.95 MiB
提交时间 2020-02-09 16:14:53
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
 
int max(int a,int b){
	if(a>b) return a;
	else return b;
}

const int maxt = 3e5 + 500;
 
int m, s, t;
int dp1[maxt], dp2[maxt];
 
int main() {
	freopen("escape.in","r",stdin);
	freopen("escape.out","w",stdout);
	int i;
	while (scanf("%d%d%d", &m, &s, &t) == 3) {
		dp1[0] = dp2[0] = 0;
		for (i = 1; i <= t; i++) {
			if (m >= 10) {//蓝够就闪烁
				dp2[i] = dp2[i - 1] + 60;
				m -= 10;
			}
			else {//蓝不够对dp2只能回蓝,不能移动
				m += 4;
				dp2[i] = dp2[i - 1];
			}
			dp1[i] = max(dp1[i - 1] + 17, dp2[i]);//根据状态转移递推结果
			if (dp1[i] >= s) break;
		}
		if (i <= t) {
			printf("Yes\n%d\n", i);
		}
		else {
			printf("No\n%d\n", dp1[t]);
		}
	}
	return 0;
}