1 条题解
-
0
C :
#include <stdio.h> #include <stdlib.h> #define MOD 100000000 int ans, f[13][5000], p[13], v[13], n, m, x, maxx; void dp(){ for(int i = 0;i <= maxx; i++){ if((i|v[1])==v[1]&&(i&(i<<1))==0)f[1][i]=1; } for(int i = 2;i <= n; i++){ for(int j = 0;j <= maxx; j++){ if(f[i-1][j]){ for(int k = 0;k <= maxx; k++){ if((k&j)==0&&(k|v[i])==v[i]&&(k&(k<<1))==0){ f[i][k]=(f[i][k]+f[i-1][j])%MOD; } } } } } for(int i = 0;i <= maxx; i++)ans=(ans+f[n][i])%MOD; } int main() { scanf("%d%d",&n,&m); maxx=(1<<m)-1; for(int i = 1;i <= n; i++) { for(int j = 1;j <= m; j++) { scanf("%d",&x); v[i]<<=1;v[i]+=x; } } dp(); printf("%d\n",ans); return 0; }C++ :
#include<cstdio> using namespace std; int f[13][401]={0}; int v[13][401];//第i行第j个状态的值 bool Map[13][13]={0}; int M,N; void Dfs(int x,int y,int w) { if(y>N) { v[x][++v[x][0]]=w; return; } Dfs(x,y+1,w<<1); if(Map[x][y] && !(w&1)) { Dfs(x,y+1,(w<<1)+1); } } int main() { scanf("%d%d",&M,&N); for(int i=1;i<=M;++i) { for(int j=1;j<=N;++j) { scanf("%d",&Map[i][j]); } Dfs(i,0,0); } for(int i=1;i<=v[1][0];++i) f[1][i]=1; for(int i=2;i<=M;++i) { for(int j=1;j<=v[i][0];++j) { for(int k=1;k<=v[i-1][0];++k) { if((v[i][j]&v[i-1][k])==0) { f[i][j]+=f[i-1][k]; f[i][j]%=100000000; } } } } int sum=0; for(int i=1;i<=v[M][0];++i) { sum+=f[M][i]; sum%=100000000; } printf("%d",sum%100000000); return 0; }
- 1
信息
- ID
- 1074
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者