代码改变世界

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 }