求助,wa了好几个
查看原帖
求助,wa了好几个
218974
wsadjkl0楼主2021/5/27 10:51

思路就是提前选一种并做了标记,然后进行搜索,未标记的都有选与不选两个方向,用的回溯,不知道哪里有问题(((φ(◎ロ◎;)φ)))

#include<bits/stdc++.h>
using namespace std;

struct aaa{
	int sour, sweet;
}a[12];

int n, mul = 1, sum, miner = 1e9+7, mark;

void dfs(int t){
	if(t > n) {
		miner = min(miner, abs(mul - sum));
		return;
	}
    if(t != mark){
		mul *= a[t-1].sour; sum += a[t-1].sweet;
		dfs(t+1);
		mul /= a[t-1].sour; sum -= a[t-1].sweet;
	}
		dfs(t+1);
}
int main(){
	cin >> n;
	for(int i = 0; i < n; i++) cin >> a[i].sour >> a[i].sweet;
    for(int i = 0; i < n; i++){
        mark = i+1; mul *= a[i+1].sour, sum += a[i+1].sweet;
	    dfs(1);
    }
	cout << miner;
	return 0;
}
2021/5/27 10:51
加载中...