一开始,代码是这样:
#include<bits/stdc++.h>
using namespace std;
long long n, s[20], b[20];
long long ss = 1, bb = 0;
long long minn = 0x7f;
long long ans = 0x7f;
long long f[20] = { 0 };
void dfs(int x)
{
if (x > n)
{
//return;
}
else
{
for (int i = 1; i <= n; i++)
{
if (f[i] == 0)
{
ss *= s[i];
bb += b[i];
minn = min(minn, abs(ss - bb));
f[i] = 1;
dfs(x + 1);
f[i] = 0;
ss /= s[i];
bb -= b[i];
}
}
}
}
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> s[i] >> b[i];
}
dfs(1);
cout << minn;
return 0;
}
只有 30 分。
但是修改了 minn 之后,就 AC 了。
就像这样:
#include<bits/stdc++.h>
using namespace std;
long long n, s[20], b[20];
long long ss = 1, bb = 0;
long long minn = 9999999999999;
long long ans = 9999999999999;
long long f[20] = { 0 };
void dfs(int x)
{
if (x > n)
{
//return;
}
else
{
for (int i = 1; i <= n; i++)
{
if (f[i] == 0)
{
ss *= s[i];
bb += b[i];
minn = min(minn, abs(ss - bb));
f[i] = 1;
dfs(x + 1);
f[i] = 0;
ss /= s[i];
bb -= b[i];
}
}
}
}
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> s[i] >> b[i];
}
dfs(1);
cout << minn;
return 0;
}
求大佬解答。
玄 1 关