#include <iostream> #include <vector> using namespace std; int main() { int m; cin >> m; vector<int> metrix(m); for (int i = 0; i < m; ++i) { cin >> metrix[i]; } int n; cin >> n; int can_place = 0; // 记录最多能放几个1 for (int i = 0; i < m; ++i) { if (metrix[i] == 0) { int left = (i == 0) ? 0 : metrix[i - 1]; int right = (i == m - 1) ? 0 : metrix[i + 1];//简单处理边界 if (left == 0 && right == 0) { metrix[i] = 1; // 放一个1 can_place++; if (can_place >= n) break; // 已经够了,break } } } /*贪心(Greedy)算法的核心原则是:每一步都做当前看来最优的选择,不回头,期望整体也是最优的。 🎯 贪心策略是:只要当前位置左右都不是 1,就把 0 变成 1,立即放! 为什么这样做是对的? 因为一旦你错过这个位置,往后再放就会错过一次机会(相邻了)。 提前放保证了“最多能放多少”,这是我们要的目标。 */ cout << (can_place >= n ? "true" : "false") << endl; return 0; }