重做数据,对得起我10分钟想的边界判断吗
2024-08-05 21:45:41
发布于:湖南
34阅读
0回复
0点赞
😡😡😡😡😡
乱输数据:
10
266932624 2263034
245238645 117742762
5221442 234502661
146430353 48845991
189151695 4175621
115586812 56657371
101834111 259316935
48161811 316270973
279738957 283242347
100163678 201664623
官方代码:1496152
我的代码:3503390
#include <iostream>
#include <cstdio>
#define int unsigned long long
using namespace std;
int a[15], b[15];
int n;
int _abs(int l, int r){//由于开了ull,所以绝对值也得重写
return (l < r ? r - l : l - r);
}
int dfs(int cur, int l, int r){
if(l * a[cur] > 1.8e10) return 12321232123212321;//边界判断
l *= a[cur], r += b[cur];
if(cur == n) return _abs(l, r);
int mx = _abs(l, r);
for(int i = cur + 1; i <= n; i++){
mx = min(mx, dfs(i, l, r));//深搜
}
return mx;
}
signed main(){
cin >> n;
for(int i = 1; i <= n; i++){
cin >> a[i] >> b[i];
}
int mn = 12321232123212321;
for(int i = 1; i <= n; i++){
mn = min(mn, dfs(i, 1, 0));//没说一定从1开始,所以得遍历所有开始的情况
}
cout << mn;
return 0;
}
全部评论 1
?
2024-08-19 来自 广东
0
有帮助,赞一个