测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A33203. 好斗的牛问题描述你有 109 个牛棚,从左到右一字排开。你希望把 N 头牛安置到牛棚里。麻烦的是,你的牛很好斗,如果他们附近有其他的牛,他们就会不安分地去挑事。其中,第 i 头牛的攻击范围是 (ai , bi),这意味着,如果他的左边 ai 个牛棚或右边 bi 个牛棚里有其他牛,他就会去挑事。你想留下连续的一段牛棚,并把其他牛棚都卖掉。请问你最少需要留下多少牛棚,才能保证至少存在一种方案能够把所…

填空题 困难

题目描述

好斗的牛

问题描述

你有 109 个牛棚,从左到右一字排开。你希望把 N 头牛安置到牛棚里。麻烦的是,你的牛很好斗,如果他们附近有其他的牛,他们就会不安分地去挑事。其中,第 i 头牛的攻击范围是 (ai , bi),这意味着,如果他的左边 ai 个牛棚或右边 bi 个牛棚里有其他牛,他就会去挑事。

你想留下连续的一段牛棚,并把其他牛棚都卖掉。请问你最少需要留下多少牛棚,才能保证至少存在一种方案能够把所有的 N 头牛都安置进剩余的牛棚里,且没有牛会挑事?

输入描述

第一行 1 个正整数 N。

接下来一行 N 个用空格隔开的正整数 ai,,,, aN。

接下来一行 N 个用空格隔开的正整数 bi,,,,bN。

输出描述

输出一行一个整数,表示你最少需要留下多少牛棚。

特别提醒

在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。

样例输入 1

2
1 2
1 2

样例输出 1

4

样例输入 2

3
1 2 3
3 2 1

样例输出 2

7

数据规模

对于 20的测试点,保证N=2;

对于另外 20的测试点,保证 N=3;

对于 80 的测试点,保证 N≤8;

对于所有测试点,保证 N≤9, ai,bi≤1000。

参考答案

#include <iostream> #include <vector> #include <algorithm> using namespace std; int N; vector<int> a, b; int ans = 1e9; int main() { cin >> N; a.resize(N); b.resize(N); for (int i = 0; i < N; ++i) { cin >> a[i]; } for (int i = 0; i < N; ++i) { cin >> b[i]; } vector<int> permutation; permutation.resize(N); for (int i = 0; i < N; i ++) permutation[i] = i; do { int curr_len = N; for (int i = 1; i < N; ++i) { curr_len += max(b[permutation[i - 1]], a[permutation[i]]); } ans = min(ans, curr_len); } while(next_permutation(permutation.begin(), permutation.end())); cout << ans << endl; return 0; }
上一题 下一题