专栏文章
题解:P12245 共同兴趣
P12245题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @minjbkv2
- 此快照首次捕获于
- 2025/12/02 03:21 3 个月前
- 此快照最后确认于
- 2025/12/02 03:21 3 个月前
,较小,可以暴力枚举答案。
提前处理出他原来跟每个人的共同兴趣数,以及每个人的共同兴趣数要求。
每个人的共同兴趣数要求就是他目前跟别人的最大的共同兴趣数,只要共同兴趣数达到了这个要求,那么就会发邀请。三重循环计算这个。
然后直接枚举那个增加的兴趣,里面套循环计算添加这个兴趣之后给他发邀请的人数,取最大值。
code
CPP#include<bits/stdc++.h>
using namespace std;
int a[510][510];
int b[510];
int f[510];
int main(){
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>a[i][j];
}
}
for(int i=1;i<n;i++){
int sum=0;
for(int j=0;j<m;j++){
if(a[0][j]==1&&a[i][j]==1){
sum++;
}
}
b[i]=sum;
}
for(int i=1;i<n;i++){
int mix=0;
for(int j=1;j<n;j++){
if(j==i){
continue;
}
int sum=0;
for(int k=0;k<m;k++){
if(a[i][k]==1&&a[j][k]==1){
sum++;
}
}
if(sum>mix){
mix=sum;
}
}
f[i]=mix;
}
int ans=0;
for(int i=1;i<n;i++){
if(b[i]>=f[i]){
ans++;
}
}
for(int k=0;k<m;k++){
if(a[0][k]==1){
continue;
}
int cnt=0;
for(int i=1;i<n;i++){
int x=b[i]+(a[i][k]==1?1:0);
if(x>=f[i]){
cnt++;
}
}
if(cnt>ans){
ans=cnt;
}
}
cout<<ans;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...