P2036,莫名WA
  • 板块灌水区
  • 楼主guoziqi201010
  • 当前回复3
  • 已保存回复3
  • 发布时间2025/1/23 22:38
  • 上次更新2025/1/24 10:11:21
查看原帖
P2036,莫名WA
1035561
guoziqi201010楼主2025/1/23 22:38

一开始,代码是这样:

#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 关

2025/1/23 22:38
加载中...