#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 10005;
const int INF = 0x3f3f3f3f;
int A[MAXN], B[MAXN]; //普通耗时,加速耗时
int dp[MAXN][20]; //dp[i][j]表示经过i段赛道,剩余j个能量,所用的最短时间
int L, N; //赛道数,圈数
int main()
{
while (cin >> L >> N)
{
for (int i = 1; i <= L; i++)
cin >> A[i];
for (int i = 1; i <= L; i++)
cin >> B[i];
A[0] = A[L];
B[0] = B[L];
for (int i = L + 1; i <= L * N; i++) //扩充赛道
{
A[i] = A[i % L];
B[i] = B[i % L];
}
for (int i = 1; i < 15; i++)
dp[0][i] = INF;
dp[0][0] = 0;
for (int i = 0; i < L * N; i++) //动态规划
{
for (int j = 0; j < 15; j++)
{
if (j == 0)
dp[i + 1][j] = dp[i][j + 5] + B[i + 1];
else if (j < 10)
dp[i + 1][j] = min(dp[i][j - 1] + A[i + 1], dp[i][j + 5] + B[i + 1]);
else if (j > 10)
dp[i + 1][j] = dp[i][j - 1] + A[i + 1];
else if (j == 10)
dp[i + 1][j] = min(dp[i][j - 1] + A[i + 1], dp[i][14] + A[i + 1]);
}
}
int ans = INF;
for (int i = 0; i < 15; i++)
{
if (dp[L * N][i] < ans)
ans = dp[L * N][i];
}
cout << ans << endl;
}
return 0;
}
HDU 1494(跑跑卡丁车)
猜你喜欢
转载自blog.csdn.net/Intelligence1028/article/details/105702923
今日推荐
周排行