Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
34445 | A21μΘ_wjy | 【S】T2 | C++ | 通过 | 100 | 932 MS | 23360 KB | 933 | 2024-11-08 08:43:29 |
#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; }