1 条题解
-
0
C++ :
#include<iostream> #include<cstdio> #include<iomanip> #include<cstdlib> #include<cstring> #include<string> #include<algorithm> #include<cmath> #include<ctime> using namespace std; int m,s,t;//m=Mana即为魔法值,s=Space为距离,t=timeleft为剩余时间。 void escape(void) { int se=0,te=t;//se为Spaceelse,te为timeleftelse。 while(m>=10&&t>0&&s-se>0)//闪烁魔法。。。 { if(s-se>17) { se+=60; m-=10; t--; } else cout<<"Yes"<<endl<<te-t+1; } while(t>0&&s-se>0) //决策判断。 { if((m==0||m==1)&&t>=7&&s-se>102) { t-=7; se+=120; } else if(m>=2&&m<=5&&t>3&&s-se>34) { m-=2; t-=3; se+=60; } else if(m>=6&&t>=2&&s-se>17) { m-=6; t-=2; se+=60; } else { se+=17; t--; } } if(s<=se) { cout<<"Yes"<<endl<<te-t; } else { cout<<"No"<<endl<<se; } return; } int main(void) { //freopen("escape.in","r",stdin); //freopen("escape.out","w",stdout); cin>>m>>s>>t; escape(); return 0; }
Pascal :
var m,s,t,ti:longint; ms:array[1..2,0..300000] of longint; ts:array[0..300000] of longint; begin {assign(input,'escape.in'); reset(input); assign(output,'escape.out'); rewrite(output);} readln(m,s,t); ms[2,0]:=m; ts[0]:=0; for ti:=1 to t do {动态规划} begin if ms[2,ti-1]>=10 then {如果能使用闪烁,就是用} begin ms[1,ti]:=ms[1,ti-1]+60; ms[2,ti]:=ms[2,ti-1]-10; end else begin ms[1,ti]:=ms[1,ti-1]; {恢复魔法值} ms[2,ti]:=ms[2,ti-1]+4; end; if ts[ti-1]+17>ms[1,ti] then ts[ti]:=ts[ti-1]+17 else ts[ti]:=ms[1,ti]; {找出大的值} if ts[ti]>=s then {如果顺利逃出,输出结果} begin writeln('Yes'); writeln(ti); close(output); halt; end; end; writeln('No'); {无法逃出,输出结果} writeln(ts[t]); {close(output);} end.
- 1
信息
- ID
- 821
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者