求助,dfs没想明白自己怎么过的
查看原帖
求助,dfs没想明白自己怎么过的
190694
木洛楼主2021/2/24 21:04
#include <iostream>
#include <algorithm>
using namespace std;
int n,s[11],b[11],ans=0x7fffffff;

void dfs(int i,int sour,int bit){
    if(i>n) return;
    dfs(i+1,sour,bit);
    sour*=s[i];
    bit+=b[i];
    ans=min(ans,abs(sour-bit));
    dfs(i+1,sour,bit);
    //此题确实不用回溯
}
int main()
{
    //cout << "Hello world!" << endl;
    //总的酸度s为每一种配料的酸度总乘积;
    //总的苦度b为每一种配料的苦度的总和。
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>s[i]>>b[i];
    //总酸度和总苦度的最小绝对差

    dfs(1,1,0);
    cout<<ans;
    return 0;
}

请问为什么这道题深度优先搜索相当于,线性搜索从输入第一个加进去到最后一个输入的,只用分支加或不加居然能够得到最优解,虽然AC了,但我实在没想通

2021/2/24 21:04
加载中...