求救
查看原帖
求救
1332905
jaydentou楼主2025/1/3 18:55
#include<bits/stdc++.h>
using namespace std;

int main(){
	int n,m;
	cin>>n>>m;
	int M[13]={};
	int c;
	int ct,num;
	
	for(int i=1;i<=n;i++){
		ct=0,num=0;
		for(int j=1;j<=m;j++){
			cin>>c;
			if(c==1){
				num+=pow(2,ct);
			}
			ct++;
		}
		M[i]=num;
	}
	vector<int>ok;
	int t=0;
	num=0;
	int cnt[378];
	int h[4097]={};
	for(int i=0;i<=pow(2,m)-1;i++){
		t=0;
		if(((i<<1 | i>>1) & i)!=0){
			continue;
		}
		
		for(int j=i;j>0;j/=2){
			if(j%2==1){
				t++;
			}
		}
		ok.push_back(i);
		cnt[i]=t;
		h[i]=num;
		num++;
		
		
	}
	

	
	
	
	vector<vector<long long>>dp,ldp;
	dp.assign(378,vector<long long>(145,0));
	ldp=dp;
	ldp[0][0]=1;
	long long ans=0;
	for(int i=1;i<=n;i++){
		for(auto x:ok){
			if((x&M[i])==x){
				//cout<<x<<' '<<M[i]<<"\n";
				for(auto j:ok){
					if((x&j)==0){
						for(int k=0;k<=n*m;k++){
							if(k-cnt[x]>=0){
								dp[h[x]][k]=(dp[h[x]][k]+ldp[h[j]][k-cnt[x]])%100000000;
								//cout<<i<<"  "<<j<<"  "<<x<<"  "<<k<<"  "<<dp[h[x]][k]<<' '<<ldp[h[j]][k-cnt[x]]<<"\n";
								
							}
						}
					}
				}
			}
		}
		ldp=dp;
		dp.assign(378,vector<long long>(145,0));
		
	}
	
	for(auto x:ok){
		for(int k=0;k<=n*m;k++){
			ans=(ans+ldp[h[x]][k])%100000000;
			//cout<<x<<' '<<k<<' '<<ldp[h[x]][k]<<"\n";
		}
	}
	cout<<ans;
	
	
	
	
	return 0;
}


為甚麼希哈會失敗啊啊啊??!

h中間有幾格出錯了,求DaLao救援







2025/1/3 18:55
加载中...