处理器问题 / AI处理器组合 [100分]
else if (arr0 == 3 || arr1 == 3) {//链路一/二,3个选一个,用dfs。if (arr0 == 1 || arr1 == 1) {//链路一/二只有一个可选,不用dfs。//两个链路中处理器数量。
#include<iostream>
#include<string>
#include<sstream>
#include<algorithm>
#include<vector>
using namespace std;
void dfs(vector<int>& curcpu, vector<vector<int>>& res, vector<int>& path, int start, int target) {
if (path.size() == target) {
res.push_back(path);
return;
}
for (int i = start; i < curcpu.size(); i++) {
path.push_back(curcpu[i]);
dfs(curcpu, res, path, i+1, target);
path.pop_back();
}
}
int main() {
vector<int> arr;
string s;
getline(cin,s);
stringstream ss(s.substr(1,s.size()-2));
string t;
while (getline(ss, t, ',')) {
int num = stoi(t);
arr.push_back(num);
}
int n;
cin >> n;
vector<vector<int>> res;
if (arr.size() < n) return 0;
sort(arr.begin(), arr.end());
vector<vector<int>> cpu(2);
int arr0 = 0;//两个链路中处理器数量
int arr1 = 0;
for (int a : arr) {
if (a < 4) {
cpu[0].push_back(a);
arr0++;
}
else {
cpu[1].push_back(a);
arr1++;
}
}
if (n == 1) {//1,3,2,4
if (arr0 == 1 || arr1 == 1) {//链路一/二只有一个可选,不用dfs
if (arr0 == 1) {
vector<int> path;
path.push_back(cpu[0][0]);
res.push_back(path);
}
if (arr1 == 1) {
vector<int> path;
path.push_back(cpu[1][0]);
res.push_back(path);
}
}else if (arr0 == 3 || arr1 == 3) {//链路一/二,3个选一个,用dfs
if (arr0 == 3) {
vector<int> path;
dfs(cpu[0], res, path, 0, 1);
}
if (arr1 == 3) {
vector<int> path;
dfs(cpu[1], res, path, 0, 1);
}
}
else if (arr0 == 2 || arr1 == 2) {
if (arr0 == 2) {
vector<int> path;
dfs(cpu[0], res, path, 0, 1);
}
if (arr1 == 2) {
vector<int> path;
dfs(cpu[1], res, path, 0, 1);
}
}
else if (arr0 == 4 || arr1 == 4) {
if (arr0 == 4) {
vector<int> path;
dfs(cpu[0], res, path, 0, 1);
}
if (arr1 == 4) {
vector<int> path;
dfs(cpu[1], res, path, 0, 1);
}
}
}
else if(n==2){//2,4,3
if (arr0 == 2 || arr1 == 2) {
if (arr0 == 2) {
vector<int> path;
dfs(cpu[0], res, path, 0, 2);
}
if (arr1 == 2) {
vector<int> path;
dfs(cpu[1], res, path, 0, 2);
}
}
else if (arr0 == 4 || arr1 == 4) {
if (arr0 == 4) {
vector<int> path;
dfs(cpu[0], res, path, 0, 2);
}
if (arr1 == 4) {
vector<int> path;
dfs(cpu[1], res, path, 0, 2);
}
}else if (arr0 == 3 || arr1 == 3) {
if (arr0 == 3) {
vector<int> path;
dfs(cpu[0], res, path, 0, 2);
}
if (arr1 == 3) {
vector<int> path;
dfs(cpu[1], res, path, 0, 2);
}
}
}
else if (n == 4) {
if (arr0 == 4 || arr1 == 4) {
if (arr0 == 4) {
res.push_back(cpu[0]);
}
if (arr1 == 4) {
res.push_back(cpu[1]);
}
}
}
else if (n == 8) {
if (arr0 == 4 && arr1 == 4) {
cpu[0].insert(cpu[0].end(),cpu[1].begin(),cpu[1].end());
res.push_back(cpu[0]);
}
}
for (int i = 0; i < res.size(); i++) {
if(i==0) cout << '[';
for (int j = 0; j < res[i].size(); j++) {
if (j == 0) {
cout << '[';
}
cout << res[i][j];
if (j != res[i].size() - 1) {
cout << ',' << ' ';
}
else {
cout << ']';
}
}
if (i != res.size() - 1) {
cout << ','<<' ';
}
else {
cout << ']';
}
}
return 0;
}
更多推荐
所有评论(0)