1484. 守望者的逃离
2011-05-17 15:48 Min·zc 阅读(302) 评论(0) 编辑 收藏 举报推荐一个师兄的博客
http://godorz.info/2009/11/heap/
//dp
//假设守望者开始只能闪烁或者原地等魔恢复
//然后再遍历一次决定在某一秒应该奔跑还是等在魔法恢复
//求出每一秒的能走的最大距离
1 #include <iostream>
2 #include <memory.h>3 using namespace std;
4 int M,S,T;
5 int dis[300001];
6 int sol()
7 {
8 int r=0;
9 for(int i=1;i<=T;i++)
10 {
11 if(M>9)
12 {
13 dis[i]=dis[r]+60;
14 r=i;
15 M-=10;
16 }
17 else
18 M+=4;
19 }
20 // for(int i=0;i<=T;i++)
21 // cout<<dis[i]<<" ";
22 // cout<<endl;
23 for(int i=1;i<=T;i++)
24 if(dis[i]<dis[i-1]+17)
25 dis[i]=dis[i-1]+17;
26 // for(int i=0;i<=T;i++)
27 // cout<<dis[i]<<" ";
28 // cout<<endl;
29 if(dis[T]<S)
30 {
31 cout<<"No"<<endl;
32 cout<<dis[T]<<endl;
33 }
34 else
35 {
36 int i=0;
37 while(dis[i]<S)
38 i++;
39 cout<<"Yes"<<endl;
40 cout<<i<<endl;
41 }
42
43 }
44 int main()
45 {
46 while(cin>>M>>S>>T)
47 {
48 memset(dis,0,sizeof(dis));
49 sol();
50 cout<<endl;
51 }
52 }