P10561 [ICPC 2024 Xi’an I] Smart Quality Inspector
题目描述
Ella 有一家工厂。一天,她的工厂面临产品质量检查。 她的工厂有 NNN 条生产线。在这 NNN 条生产线中,有 N−KN-KN−K 条是合格的,另外 KKK 条是不合格的。第 iii 条(1≤i≤K1\leq i\leq K1≤i≤K)不合格生产线的罚款为 iii 元。 这里有 MMM 名质量检查员。对于第 jjj 名(1≤j≤M1\leq j\leq M1≤j≤M)质量检查员,他将检查从第 lil_ili 条到第 rir_iri 条的生产线,并在其中找到罚款最高的不合格生产线,然后将此罚款施加给 Ella。 Ella 不想收到太多罚款,所以她决定重新编号这 NNN 条生产线以使收到的罚款最少。请帮助她。 简单来说: 你有一个长度为 NNN 的序列 AAA,A=[1,2,3,...,K,0,0,0,...,0]A=[1,2,3,...,K,0,0,0,...,0]A=[1,2,3,...,K,0,0,0,...,0]。这里 N,KN,KN,K 已知。 有 MMM 对整数,每对由两个数字 li,ril_i,r_ili,ri 组成。 你需要重新排列序列 AAA 以最小化以下值: ∑i=1Mmaxj=liri(Aj)\sum_{i=1}^M \max_{j=l_i}^{r_i} (A_{j})i=1∑Mj=limaxri(Aj)
输入格式
第一行包含三个整数 N,K,M(1≤K≤N≤20,1≤M≤105)N,K,M(1\leq K\leq N\leq 20,1\leq M\leq 10^5)N,K,M(1≤K≤N≤20,1≤M≤105),如题所述。 接下来 MMM 行,每行包含两个整数 li,ri(1≤li≤ri≤N)l_i,r_i(1\leq l_i\leq r_i\leq N)li,ri(1≤li≤ri≤N)。
输出格式
一个整数,表示答案。
输入输出样例 #1
输入 #1
4 4 3
1 2
3 4
1 4
输出 #1
10
说明/提示
(由 ChatGPT 4o 翻译)
C++实现
#include <bits/stdc++.h>
using namespace std;
int n, k, m, l, r, ans=1e9, pre[25][25], f[2000010], lst[25], nxt[25];
int main(){
scanf ("%d%d%d", &n, &k, &m);
for (int i=1; i<=m; i++){
scanf ("%d%d", &l, &r);
pre[l][r] ++;
}
for (int i=1; i<=n; i++){
for (int j=1; j<=n; j++){
pre[i][j] = pre[i][j] + pre[i][j-1] + pre[i-1][j] - pre[i-1][j-1];
}
}
for (int S=1; S<(1<<n); S++){
int tot = 0;
for (int i=0; i<n; i++){
if ((S >> i) & 1) tot ++;
}
if (tot > k) continue;
f[S] = 1e9, lst[0] = 0, nxt[n+1] = n+1;
for (int i=0; i<n; i++){
if ((S >> i) & 1) lst[i+1] = i+1;
else lst[i+1] = lst[i];
}
for (int i=n-1; i>=0; i--){
if ((S >> i) & 1) nxt[i+1] = i+1;
else nxt[i+1] = nxt[i+2];
}
for (int i=0; i<n; i++){
if (!((S >> i) & 1)) continue;
int T = S - (1 << i);
int st = lst[i], ed = nxt[i+2] - 2;
int ad = pre[i+1][ed+1] - pre[st][ed+1] - pre[i+1][i] + pre[st][i];
f[S] = min(f[S], f[T] + ad * (k - tot + 1));
}
if (tot == k) ans = min(ans, f[S]);
}
printf ("%d\n", ans);
return 0;
}

后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容
用C++实现信奥题 P10561 ICPC 2024 Xi‘an I Smart Quality Inspector&spm=1001.2101.3001.5002&articleId=163195515&d=1&t=3&u=975a226183404659bd87b4eea982ee21)
318

被折叠的 条评论
为什么被折叠?



