NOIP 2007 守望者的逃离
传送门:
https://ac.nowcoder.com/acm/contest/235/C
/*
这道题实际上是……动规+贪心
用10魔法能移动60m 显然用魔法是最快的
但是魔法值不够呢(伤心
那就对休息或者跑步进行选择
*/
#include <iostream>
#include <algorithm>
using namespace std;
int f[300010];//放多一点 同时放外面就不要memset了
int main()
{
int m, s, t;//这个就不用注释了吧(坏笑
cin >> m >> s >> t;//输入
f[0] = 0;
for (int i = 1; i <= t; i++)
{
if (m >= 10)//可以用魔法
{
f[i] = f[i - 1] + 60;//闪烁法术
m -= 10;//魔法减少
}
else//魔法不够用了(悲催
{
f[i] = f[i - 1];//先休息吧
m = m + 4;//恢复魔力(太棒了
}
}
for (int i = 1; i <= t; i++)
{
f[i] = max(f[i], f[i - 1] + 17);
if (f[i] >= s)
{
cout << "Yes" << endl;//"我跑出来了!",守望者欢呼
cout << i << endl;
return 0;//守望者,再见,GoodLuckToYou
}
}
//难道没有逃出来?
cout << "No" << endl;//(悲催
cout << f[t] << endl;
return 0;//守望者Goodbye
}
查看10道真题和解析