#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main(){
int maxn=
10005;
//注意数组的边界
int T;
cin
>>T;
while(T--){
int n,k;
cin
>>n
>>k;
long long array[maxn][
3];
//将两条路定义为一个二维数组
long long dp[maxn][
15][
3];
//定义一个三维数组,第二位表示在换了J次路后的耗油量
int i,j;
for(j=
1;j<=
2;j++)
for(i=
1;i<=n;i++)
cin
>>array[i][j];
memset(dp,
0x7f,
sizeof(dp));
//初始化DP,且初始值要够大
dp[
1][
0][
1]=array[
1][
1];
//开始选择第一条路不需要进行换路,直接赋值
dp[
1][
0][
2]=array[
1][
2];
for(i=
2;i<=n;i++){
dp[i][
0][
1]=dp[i-
1][
0][
1]+array[i][
1];
//表示第一次换路后的情况
dp[i][
0][
2]=dp[i-
1][
0][
2]+array[i][
2];
for(j=
1;j<=min(i,k);j++){
//接下来遍历所有换路不换路的情况
dp[i][j][
1]=min(dp[i-
1][j][
1],dp[i-
1][j-
1][
2])+array[i][
1];
dp[i][j][
2]=min(dp[i-
1][j][
2],dp[i-
1][j-
1][
1])+array[i][
2];
}
}
long long ans=
100000000000000;
for(j=
0;j<=k;j++)
ans=min(ans,min(dp[n][j][
1],dp[n][j][
2]));
//由于题目给的最大耗油量够大,必须与题给的最大耗油量进行比较取最小值
cout
<<ans
<<endl;
}
return 0;
}
转载请注明原文地址: https://ju.6miu.com/read-39053.html