#include <iostream>
#include <istream>
#include <sstream>
#include <vector>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <cstring>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <numeric>
#include <chrono>
#include <ctime>
#include <cmath>
#include <cctype>
#include <string>
#include <cstdio>
#include <iomanip>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <functional>
#include <iterator>
using namespace std;
const int maxn = 1024;
int m, k;
int input[maxn],ans[maxn];
bool Check(int value) {
int sum = 0,cnt = 1;
for (int i = m-1; i >=0; i--) {
if (sum + input[i] <= value) sum += input[i];
else {
cnt++;
sum = input[i];
if (cnt > k) return false;
}
}
return true;
}
int main()
{
int t;
cin >> t;
while (t--) {
cin >> m >> k;
int nleft = 1, nRight = 0x3fffffff, nMid,sum = 0;
memset(ans, 0, sizeof(ans));
for (int i = 0; i < m; i++) {
cin >> input[i];
nleft = max(nleft, input[i]);
}
while (nleft < nRight) {
nMid = (nleft + nRight) >> 1;
if (Check(nMid)) {
nRight = nMid;
}
else nleft = nMid + 1;
}
for (int i = m-1; i >= 0; i--) {
if (sum + input[i] > nleft || i + 1 < k) {
k--;
ans[i] = 1;
sum = input[i];
}
else sum += input[i];
}
for (int i = 0; i < m - 1; i++) {
cout << input[i] << " ";
if (ans[i]) cout << "/ ";
}
cout << input[m-1] << endl;
}
return 0;
}
07-15
12-25
05-21
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交