提交时间:2024-11-08 08:43:29
运行 ID: 34445
#include<bits/stdc++.h> #define int long long using namespace std; const int maxn=2e6+7; int n,m,c; int s[maxn]; int cnt[maxn]; int f[maxn]; inline void Ins(int x,int k,int L){ f[x]=L; for(int i=k;i<m;i++){ int c=x^(1<<i); if(L+1<f[c])Ins(c,k+1,L+1); } } //每个点的 f 值不会超过 m,所以总的修改次数是O(m2^m)的。这个至关重要的性质保证了时间复杂度的正确性。 signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); // freopen("code.in","r",stdin); // freopen("code.out","w",stdout); cin>>n>>m>>c; for(int i=0;i<(1<<m);i++)f[i]=c; int ans=0; for(int i=1;i<=n;i++){ for(int j=0;j<m;j++){ char t; cin>>t; s[i]=(s[i]<<1)+t-'0';//赛时唐氏综合征发病记录#1 } ans+=f[s[i]]; Ins(s[i],0,1); } cout<<ans<<endl; return 0; }