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

P14990 马赛克 - Link

发现不美观的四个点中行相同或列相同的两个点颜色不同,所以修改的时候把一行或一列全部变成一样的最优,这样相当于这一行(列)无法做任何贡献,即把这一行(列)删掉。考虑枚举那些列删掉,然后把他们真的删掉,暴力统计总方案,然后设 \(f_s\) 表示把集合 \(s\) 内的行留下来的不美观度,转移直接 \(\mathcal{O}(n)\) 暴力,总时间复杂度 \(\mathcal{O}(2^{n+m}\times n)\),理论很玄,实际可过。

代码

/*
Luogu P14990 马赛克
2026-03-02
*/
#include<bits/stdc++.h>
using namespace std;
namespace IO{template<typename T>inline void read(T&x){x=0;char c=getchar();bool f=0;while(!isdigit(c)) c=='-'?f=1:0,c=getchar();while(isdigit(c)) x=x*10+c-'0',c=getchar();f?x=-x:0;}template<typename T>inline void write(T x){if(x==0){putchar('0');return ;}x<0?x=-x,putchar('-'):0;short st[50],top=0;while(x) st[++top]=x%10,x/=10;while(top) putchar(st[top--]+'0');}inline void read(char&c){c=getchar();while(isspace(c)) c=getchar();}inline void write(char c){putchar(c);}inline void read(string&s){s.clear();char c;read(c);while(!isspace(c)&&~c) s+=c,c=getchar();}inline void write(string s){for(int i=0,len=s.size();i<len;i++) putchar(s[i]);}template<typename T>inline void write(T*x){while(*x) putchar(*(x++));}template<typename T,typename...T2> inline void read(T&x,T2&...y){read(x),read(y...);}template<typename T,typename...T2> inline void write(const T x,const T2...y){write(x),putchar(' '),write(y...),sizeof...(y)==1?putchar('\n'):0;}
}using namespace IO;
#define ull unsigned long long
const int maxn=20;
int f[(1<<12)+10],n,m,k,a[maxn][maxn],b[maxn][maxn],g[maxn][maxn];
ull w[30010];
ull ksm(ull a,int b){ull ans=1;while(b){if(b&1) ans*=a;a*=a;b>>=1;}return ans;
}
void solve(){memset(w,0,sizeof(w));read(n,m,k);for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) read(a[i][j]);for(int s=0;s<(1<<m);s++){int h;for(int i=1;i<=n;i++){int cnt=0;for(int j=1;j<=m;j++){if(s&(1<<j-1)) continue;b[i][++cnt]=a[i][j];}h=cnt;}int zz=0;for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++){int z=0;for(int k=1;k<=h;k++) for(int l=k+1;l<=h;l++) if(b[i][k]==b[j][l]&&b[j][k]==b[i][l]&&b[i][k]!=b[i][l]) z++;g[i][j]=g[j][i]=z;zz+=z;}f[0]=0;for(int i=1;i<(1<<n);i++){int w=i&-i,lt=i^w,w_id=__lg(w)+1;f[i]=f[lt];for(int j=lt;j;j-=(j&-j)) f[i]+=g[w_id][__lg(j&-j)+1];}for(int i=0;i<(1<<n);i++) w[f[i]]++;}ull ans=0;for(int i=0;i<=30000;i++) ans+=ksm(w[i],k);write(ans),write('\n');
}
signed main(){int T;read(T);while(T--) solve();return 0;
}
http://www.jsqmd.com/news/428755/

相关文章:

  • ubuntu系统部署jenkins
  • 封边机品牌推荐|品牌干货 + 避坑指南 - 星辉数控
  • 干货合集:10个降AI率网站测评,专科生必看的降AI率工具推荐
  • 深入浅出:RS-232 和 RS-485 串口通信的区别与由来
  • 2026过滤分离性能检测验证哪家好?专业机构推荐 - 品牌排行榜
  • 闲置天猫超市卡别浪费!3种便捷回收方法,轻松变现不踩坑 - 京回收小程序
  • 谷歌优化哪个企业口碑好?深耕23年的百站网络给出满意答案 - 品牌推荐大师
  • CLAUDE.md内容的一些实践总结
  • 2026四川幕墙玻璃更换优质服务商推荐指南 - 优质品牌商家
  • continue
  • 2026年工控原件回收厂家推荐:金南磊机电回收中心专业供应西门子/AB罗克韦尔/变频器/模块/触摸屏回收 - 品牌推荐官
  • 跑论文的测试代码创建了一个本地分支test-fai
  • Linux Screen 命令速查
  • 2026少儿英语机构怎么选?六大优质机构盘点 - 品牌2026
  • 2026四川幕墙玻璃更换优质服务商推荐榜:幕墙上开窗户的公司、幕墙玻璃改开窗联系方式、幕墙玻璃更换公司电话选择指南 - 优质品牌商家
  • 124.计网---第一章
  • Vue 3 理解 ref, reactive, computed, watch
  • 青少年近视防控为什么这么难?
  • 直接上结论:9个一键生成论文工具测评!研究生毕业论文+科研写作必备神器
  • 英文建站公司选择攻略:如何找到实力强、信誉好的专业服务商 - 品牌推荐大师
  • 让 Nginx for windows 服务开机自启
  • 2026烧烤加盟品牌优质推荐榜 高性价比低风险之选 - 优质品牌商家
  • 2026年自动锁螺丝机厂家推荐:深圳好伙伴智能科技专业供应吹气式/桌面式/多轴式全系产品 - 品牌推荐官
  • Windows纯本地部署OpenClaude:从零搭建你的7×24小时AI助理,打通微信/飞书
  • C++ 左值与右值(Lvalue/Rvalue)全解析
  • 腾讯应用宝创新服务模式,打造便捷高效移动应用新体验
  • 2026最新重庆会展策划公司权威推荐:3家实力企业助你高效落地 - 深度智识库
  • python+flask+vue框架的档案数字化项目沟通协作管理系统
  • 从“HALO交易”到电力系统智能化:霍尔电流传感器如何助力新能源革命?
  • 2026最新重庆活动策划公司排行榜:实力机构盘点与选择指南 - 深度智识库