当前位置: 首页 > news >正文

P7154 [USACO20DEC] Sleeping Cows P 题解

P7154 [USACO20DEC] Sleeping Cows P 题解

\(s, t\) 升序排序。

容易发现每一个 \(t_i\) 可匹配的 \(s_j\) 对应了一个前缀。

考虑刻画极大匹配,一个匹配是极大的当且仅当最大的没有被匹配的 \(t\) 小于最小的没有被匹配的 \(s\)

证明:充分性显然,如果一个匹配不是极大的,那么 \(\exists i, j, t_i\ge s_j\),其中 \(t_i, s_j\) 未匹配,转化为逆否命题得证必要性。

我们按数值从小到大考虑每一个 \(t_i\)\(s_j\),将它们按升序排成一行,如果把 \(t_i\) 视作黑球,\(s_j\) 视作白球,那么问题转化为了:前面的白球可以选择和后面的某一个黑球匹配,且最小没有匹配的白球后面没有未匹配的黑球。

这个经典的黑白球匹配问题可以用如下 DP 解决:\(f_{i, j, 0/1}\) 表示前 \(i\) 个球,有 \(j\) 个白球需要和后面的黑球匹配,是否有没有匹配的白球,转移考虑当前是黑球白球,以及是否和某个球匹配了。

时间复杂度 \(O(n^2)\)

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <ctime>
#define int long long
#define x first
#define y second
using namespace std;
typedef pair<int, int> PII;
typedef unsigned long long ull;
const int N = 6000 + 10, mod = 1e9 + 7;int n, a[N], b[N], w[N], f[N][N][2], idx;
PII p[N];signed main() {ios::sync_with_stdio(0), cin.tie(0);cin >> n;for(int i = 1; i <= n; i ++) cin >> a[i], p[++ idx] = {a[i], 0};for(int i = 1; i <= n; i ++) cin >> b[i], p[++ idx] = {b[i], 1};sort(p + 1, p + idx + 1);f[0][0][0] = 1;for(int i = 1; i <= idx; i ++) {for(int j = 0; j <= i; j ++) {for(int o = 0; o < 2; o ++) {if(f[i - 1][j][o]) {int v = f[i - 1][j][o];if(p[i].y) { // blackif(!o) f[i][j][o] = (f[i][j][o] + v) % mod;if(j) f[i][j - 1][o] = (f[i][j - 1][o] + v * j) % mod;}else {f[i][j][1] = (f[i][j][1] + v) % mod;f[i][j + 1][o] = (f[i][j + 1][o] + v) % mod;}}}}}cout << (f[idx][0][0] + f[idx][0][1]) % mod << '\n';return 0;
}
http://www.jsqmd.com/news/25025/

相关文章:

  • Java流程控制——switch多选择结构
  • P3607 [USACO17JAN] Subsequence Reversal P 题解
  • 概率论测试(上)
  • 示性函数2
  • 随笔/杂记
  • k3s 基础 —— 将 traefik 替换为 ingress-nginx
  • 使用 Swift 解析验证码(结合 Tesseract OCR)
  • 常见排序算法Java实现
  • 题解:qoj1875 Nein
  • 【uni-app】申请高德地图key,封装map.js,实现H5、iOS、Android通过getlocation获取地图定位信息(摘)
  • .NET开发上手Microsoft Agent Framework(一)从开发一个AI美女聊天群组开始
  • java作业4
  • 10/28
  • 大学四年的学费/生活费自足攻略
  • 175天 隧道技术篇防火墙组策略FRPNPSChiselSocks代理端口映射C2上线
  • 10.28每日总结
  • 每日反思(2025_10_28)
  • 102302126李坤铭作业1
  • 10月28日日记
  • 【大模型应用开发】之本地部署大模型
  • link元素的用法及HTML样板
  • Raft 一致性算法简介
  • 10月28号
  • URL验证绕过速查表:全面解析SSRF与CORS绕过技术
  • https://avoid.overfit.cn/post/44c8d547475340d59aa4480f634ea67f
  • 记录一次成功的springboot2
  • 算法学习-素数筛法【埃氏筛法、线性筛法】
  • Day 18
  • Jenkins Share Library教程 —— 企业级 Jenkins Shared Library 实战示例
  • STM32之fromelf生成bin和反汇编文件