UOJ Logo

NOI.AC

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#207360#3748. 状压 1one_zero_four_zero100873ms18220kbC++111.4kb2024-07-28 18:19:172024-07-28 20:15:40

answer

#include<bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;

int T, n, m, ans = 114514;
int val[405][405];
int f[405], dp[(1 << 22) + 5];
int cnt[405];

void dfs(int k, int num){
	if (k == n){
		bool cur = 1;
		for (int i = 0; i < m; i ++){
			if (!cnt[i]) cur = 0;
		}
		if (cur) ans = min(ans, num);
		return;
	}
	dfs(k + 1, num);
	for (int i = 0; i < m; i ++){
		cnt[i] += val[k][i];
	}
	dfs(k + 1, num + 1);
	for (int i = 0; i < m; i ++){
		cnt[i] -= val[k][i];
	}
}

void solve1(){
	memset(cnt, 0, sizeof(cnt));
	dfs(0, 0);
	printf("%d\n", ans);
}

void solve2(){
	memset(f, 0, sizeof(f));
	for (int i = 0; i < n; i ++){
		for (int j = 0; j < m; j ++){
			f[i] = (f[i] << 1) + val[i][j];
		}
	}
	memset(dp, 0x3f, sizeof(dp));
	dp[0] = 0;
	for (int s = 0; s < (1 << m); s ++){
		for (int i = 0; i < n; i ++){
			dp[s] = min(dp[s], dp[s & (~f[i])] + 1);
			// cout << s << " " << (s & (~f[i])) << " " << dp[s & (~f[i])] << " " << dp[s] << ";;\n";
		}
	}
	printf("%d\n", dp[(1 << m) - 1]);
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("../data.in","r",stdin);
    freopen("../data.out","w",stdout);
#endif

	scanf("%d", &T);
	while (T --){
		ans = 114514;
		memset(val, 0, sizeof(val));
		scanf("%d %d", &n, &m);
		for (int i = 0; i < n; i ++){
			for (int j = 0; j < m; j ++){
				scanf("%d", &val[i][j]);
			}
		}
		if (n <= 20) solve1();
		else solve2();
	}

    return 0;
}

Details

小提示:点击横条可展开更详细的信息

Test #1:

score: 5
Accepted
time: 0ms
memory: 1836kb

input:

10
10 40
1 1 0 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 0 1 1 1 1 0 1 1 0 1 1 1
1 1 1 1 1 1...

output:

3
3
4
3
3
5
4
5
3
2

result:

ok 10 tokens

Test #2:

score: 5
Accepted
time: 2ms
memory: 1836kb

input:

10
10 40
1 0 0 1 0 1 1 1 0 1 1 0 1 1 1 0 0 0 1 0 1 0 0 0 1 0 0 1 0 0 0 0 1 1 0 1 0 0 1 1
0 1 1 0 0 1...

output:

4
4
3
2
4
4
4
3
4
3

result:

ok 10 tokens

Test #3:

score: 5
Accepted
time: 2ms
memory: 1840kb

input:

10
10 40
1 1 1 1 0 1 1 0 0 0 1 0 0 1 1 1 1 1 0 1 1 1 0 0 1 1 0 0 0 1 1 1 0 0 1 1 0 1 0 1
0 0 0 1 0 0...

output:

4
3
3
4
4
4
5
3
3
3

result:

ok 10 tokens

Test #4:

score: 5
Accepted
time: 0ms
memory: 1836kb

input:

10
10 40
0 1 1 0 0 0 1 0 1 0 1 1 0 1 0 1 0 1 0 0 1 1 1 1 0 1 0 1 1 1 0 1 1 0 0 1 0 1 1 1
0 1 0 0 1 1...

output:

4
3
3
4
4
2
3
3
2
3

result:

ok 10 tokens

Test #5:

score: 5
Accepted
time: 0ms
memory: 1836kb

input:

10
10 40
0 1 1 0 1 1 0 1 1 1 1 1 0 1 1 0 1 0 0 0 1 0 0 1 1 1 1 1 0 0 1 0 1 1 0 1 1 0 1 1
1 1 1 0 0 0...

output:

4
4
2
3
4
3
3
3
4
3

result:

ok 10 tokens

Test #6:

score: 5
Accepted
time: 0ms
memory: 1836kb

input:

10
10 40
0 0 0 1 0 1 1 1 1 1 1 0 0 1 1 1 1 1 0 1 1 1 1 0 1 0 0 0 1 1 1 1 1 0 0 0 1 0 1 0
0 0 1 1 0 0...

output:

3
3
3
4
3
5
3
3
3
4

result:

ok 10 tokens

Test #7:

score: 5
Accepted
time: 9ms
memory: 18216kb

input:

10
40 10
0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 1 0 0 0 0
0 1 0 0 1 0...

output:

5
4
4
4
3
4
5
3
8
5

result:

ok 10 tokens

Test #8:

score: 5
Accepted
time: 16ms
memory: 18220kb

input:

10
40 10
0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 1
0 0 0 0 0 0 1 0 0 0
0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0...

output:

4
3
4
4
9
4
4
7
4
7

result:

ok 10 tokens

Test #9:

score: 5
Accepted
time: 14ms
memory: 18216kb

input:

10
40 10
0 0 1 1 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0
1 0 0 0 0 0...

output:

4
5
6
4
8
4
4
5
7
7

result:

ok 10 tokens

Test #10:

score: 5
Accepted
time: 15ms
memory: 18216kb

input:

10
40 10
0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0...

output:

9
4
3
5
5
4
4
8
8
3

result:

ok 10 tokens

Test #11:

score: 5
Accepted
time: 20ms
memory: 18220kb

input:

10
40 10
0 1 0 0 1 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1
0 0 0 1 0 0 1 0 0 0
0 0 0 0 0 0...

output:

6
4
5
8
4
9
4
5
5
6

result:

ok 10 tokens

Test #12:

score: 5
Accepted
time: 17ms
memory: 18216kb

input:

10
40 10
0 0 1 0 0 0 0 1 0 0
0 1 0 0 0 1 0 1 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 1 0 1 0...

output:

3
4
4
4
4
5
5
8
4
6

result:

ok 10 tokens

Test #13:

score: 5
Accepted
time: 34ms
memory: 18216kb

input:

10
26 15
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 0 0 0 0 0 0 0 0 1 0 0 0
0...

output:

8
8
6
7
8
6
11
7
8
8

result:

ok 10 tokens

Test #14:

score: 5
Accepted
time: 31ms
memory: 18216kb

input:

10
26 15
1 0 0 0 0 0 0 0 0 1 1 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 1 0 0 0 1 0 0 0 0 0 0
0...

output:

8
7
10
7
8
8
9
8
8
9

result:

ok 10 tokens

Test #15:

score: 5
Accepted
time: 237ms
memory: 18220kb

input:

10
21 19
0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0...

output:

8
4
5
3
3
8
11
3
12
3

result:

ok 10 tokens

Test #16:

score: 5
Accepted
time: 21ms
memory: 18220kb

input:

10
99 4
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 1 0 0
0 0 0 0
0 0 0 0
0 0 1 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 ...

output:

4
4
3
4
3
4
3
4
2
4

result:

ok 10 tokens

Test #17:

score: 5
Accepted
time: 33ms
memory: 1840kb

input:

10
15 26
1 1 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1
0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0...

output:

6
5
5
7
7
5
10
10
7
11

result:

ok 10 tokens

Test #18:

score: 5
Accepted
time: 29ms
memory: 1840kb

input:

10
15 26
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 1...

output:

13
9
4
10
5
4
7
5
5
5

result:

ok 10 tokens

Test #19:

score: 5
Accepted
time: 393ms
memory: 1840kb

input:

10
19 21
0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
0 0 0 0...

output:

10
7
6
4
4
3
3
5
6
6

result:

ok 10 tokens

Test #20:

score: 5
Accepted
time: 0ms
memory: 1840kb

input:

10
4 99
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 ...

output:

2
2
2
2
2
2
2
2
2
2

result:

ok 10 tokens