Edu Div.2 E. FTL(dp)
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Edu Div.2 E. FTL(dp)相关的知识,希望对你有一定的参考价值。
Edu Div.2 E. FTL(dp)
第一维度枚举生命值,
先枚举单独进行t1和t2的转移。
第二维枚举共同发射的时候进行了多少次t1或t2。
时间复杂度: O ( h 2 ) O(h^2) O(h2)
参考jiangly的代码。
#include <bits/stdc++.h>
using i64 = long long;
int main()
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int p1, p2, h, s;
i64 t1, t2;
std::cin >> p1 >> t1 >> p2 >> t2 >> h >> s;
std::vector<i64> dp(h + 1);
dp[0] = 0;
for (int i = 1; i <= h; i++)
dp[i] = std::min(dp[std::max(0, i - (p1 - s))] + t1, dp[std::max(0, i - (p2 - s))] + t2);
for (int j = 1; j <= i; j++)
if (j * t1 >= t2)
i64 dmg = (j - 1) * (p1 - s) + (j * t1 - t2) / t2 * (p2 - s) + (p1 + p2 - s);
dp[i] = std::min(dp[i], dp[std::max(0LL, i - dmg)] + j * t1);
if (j * t2 >= t1)
i64 dmg = (j - 1) * (p2 - s) + (j * t2 - t1) / t1 * (p1 - s) + (p1 + p2 - s);
dp[i] = std::min(dp[i], dp[std::max(0LL, i - dmg)] + j * t2);
std::cout << dp[h] << "\\n";
return 0;
以上是关于Edu Div.2 E. FTL(dp)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #455 (Div. 2) E. Coprocessor DAG图上dp
Educational Codeforces Round 111 (Rated for Div. 2) E. Stringforces 二分答案+状压dp
Codeforces Round #727 (Div. 2) E. Game with Cards(巧妙dp的优化)
Codeforces Round #727 (Div. 2) E. Game with Cards(dp优化,从n^2到nlog到n)