对情况进行讨论,主要也就是什么时候两个人可以一起使用,也就相当于可以重置冷却。
不同时使用的,一定没有同时使用的更优。
E. FTL
代码
| /* |
| 首先如果两个人不能同时使用的话,也就是直接采用地推就可以了 |
| 然后考虑两个人一起使用 |
| 枚举一个用了j次,并且他们最后一次是同时进行使用的 |
| 然后进行地推就可以了 |
| |
| 如果可以同时使用,那么同时使用肯定是比不同时使用更优的,这是dp的局部最优性 |
| |
| 关键就是先进行简单的地推 |
| 然后枚举两个人一起进行,从而重置冷却 |
| */ |
| |
| using namespace std; |
| |
| |
| int f[5005]; |
| |
| signed main() { |
| memset(f,0x3f,sizeof(f)); |
| f[0]=0; |
| int p1,t1,p2,t2,h,s; |
| cin>>p1>>t1>>p2>>t2>>h>>s; |
| for(int i=0;i<h;i++) {//采用刷表法进行递推 |
| f[min(i+p1-s,h)]=min(f[min(i+p1-s,h)],f[i]+t1); |
| f[min(i+p2-s,h)]=min(f[min(i+p2-s,h)],f[i]+t2); |
| for(int j=1;j<=h;j++) { |
| if(j*t1>=t2) { |
| int sum=((j-1)*(p1-s))+(p1+p2-s)+((j*t1-t2)/t2*(p2-s)); |
| f[min(i+sum,h)]=min(f[min(i+sum,h)],f[i]+j*t1); |
| } |
| if(j*t2>=t1) { |
| int sum=((j-1)*(p2-s))+(p1+p2-s)+((j*t2-t1)/t1*(p1-s)); |
| f[min(i+sum,h)]=min(f[min(i+sum,h)],f[i]+j*t2); |
| } |
| } |
| } |
| cout<<f[h]<<endl; |
| return 0; |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】