LoginSignup
0
0

More than 5 years have passed since last update.

N個の整数からM個の整数を選んで掛け算をしてその積が最大になる値を出力するプログラム

Posted at
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <cstdio>
#include <algorithm>
#include <queue>
#define BEGIN ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define END return EXIT_SUCCESS;
using namespace std;

void dfs(vector<int> integer_list, vector<bool> &used, int used_num, int target_num, int product, priority_queue<int> &products, int start) {
  if (used_num == target_num) {
    products.push(product);
    return;
  }
  int size = integer_list.size();
  int i;
  for (i = start; i < size; i++) {
    if (!used[i]) {
      used[i] = true;
      dfs(integer_list, used, used_num + 1, target_num, product * integer_list[i], products, i + 1);
      used[i] = false;
    }
  }
}

inline void solve() {
  vector<int> integer_list;
  string input;
  cin >> input;

  istringstream iss(input);
  string integer;
  while (getline(iss, integer, ',')) {
    integer_list.push_back(stoi(integer));
  }
  int size = integer_list.size();
  if (size < 3) {
    cout << -1 << endl;
    return;
  } else if (size == 3) {
    cout << (integer_list[0]*integer_list[1]*integer_list[2]) << endl;
    return;
  }
  vector<bool> used(size);
  priority_queue<int> products;
  dfs(integer_list, used, 0, 3, 1, products, 0);
  cout << products.top() << endl;
}

int main(int argc, char**argv) {
  BEGIN
  solve();
  END
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0