Submission
Status:
[PPPPPPPPPP-SSSS]
Subtask/Task Score:
{0/100}
Score: 0
User: krittaphot
Problemset: forex
Language: cpp
Time: 0.002 second
Submitted On: 2026-03-07 14:22:19
#include <bits/stdc++.h>
using namespace std;
int n;
double memo[31][31];
int solve(int start,int now,int cnt,double mutiply,vector<vector<double>>& currency,vector<int>& use){
if(start == now && mutiply >= 1.01){
return cnt;
}
if(memo[now][cnt] >= mutiply) return INT_MAX;
memo[now][cnt] = mutiply;
int ans = INT_MAX;
for(int i = 1; i <= n; i++){
if(i == now) continue;
if(use[i] && i != start) continue;
use[i] = 1;
ans = min(ans,solve(start,i,cnt+1,mutiply*currency[now][i],currency,use));
use[i] = 0;
}
return ans;
}
int main()
{
cin >> n;
vector<vector<double>> currency(n+1, vector<double>(n+1));
vector<int> use(n+1,false);
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
cin >> currency[i][j];
}
}
int ans = INT_MAX;
int start = 0;
for(int i = 1; i <= n; i++){
use[i] = 1;
int res = solve(i,i,0,1.0,currency,use);
if(res < ans){
ans = res;
start = i;
}
use[i] = 0;
}
if(ans == INT_MAX){
cout << "-1" << endl;
} else {
cout << start << " " << ans << endl;
}
}