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 }