luogu P1095守望者的逃离dpBy cellur925
Posted nopartyfoucaodong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luogu P1095守望者的逃离dpBy cellur925相关的知识,希望对你有一定的参考价值。
考虑dp,设f[i]表示到第i时间,能到达的最远距离。因为题目涉及了三种操作:1,补血消耗魔法值;2, 等待增加魔法值;3,直接向前走。而1,3和2,3的操作是可以同时进行没有冲突的,所以我们可以分开处理。
先预处理出使用魔法的情况,再跑一遍朴素走的情况即可。
Code
1 #include<cstdio> 2 #include<algorithm> 3 4 using namespace std; 5 6 int m,s,t; 7 int f[500000]; 8 9 int main() 10 { 11 scanf("%d%d%d",&m,&s,&t); 12 for(int i=1;i<=t;i++) 13 { 14 if(m>=10) m-=10,f[i]=f[i-1]+60; 15 else m+=4,f[i]=f[i-1]; 16 } 17 for(int i=1;i<=t;i++) 18 { 19 f[i]=max(f[i-1]+17,f[i]); 20 if(f[i]>=s) 21 { 22 printf("Yes "); 23 printf("%d",i); 24 return 0; 25 } 26 } 27 printf("No "); 28 printf("%d",f[t]); 29 return 0; 30 }
我dp太弱了这么水的题还要看题解
以上是关于luogu P1095守望者的逃离dpBy cellur925的主要内容,如果未能解决你的问题,请参考以下文章