UVa 11205 - The broken pedometer(求子集)
2014-02-22 17:56
381 查看
题目链接:UVa 11205 - The broken pedometer
使用位向量法求子集,然后求可以区分输入矩阵的不同行所需的最少列数,即最少使用的LED数目,使用了最简单的暴力法进行的比较(这样很慢),嗯,很黄很暴力。
使用位向量法求子集,然后求可以区分输入矩阵的不同行所需的最少列数,即最少使用的LED数目,使用了最简单的暴力法进行的比较(这样很慢),嗯,很黄很暴力。
#include <iostream> #include <stdio.h> #include <cstring> using namespace std; //#define test const int MAX_N = 100 + 10; const int MAX_P = 15 + 5; int map[MAX_N][MAX_P]; int vis[MAX_P]; int T,N,P,_max; void solve() { bool flag = true; int num = 0; for(int i = 0;i < N - 1;i++) { for(int j = i + 1;j < N;j++) { flag = true; for(int k = 0;k < P;k++) { if(vis[k] && map[i][k] != map[j][k]) flag = false; } if(flag) return;//这两行完全相同 } } for(int m = 0;m < P;m++) { if(vis[m]) num++; } if(num < _max) _max = num; } void subset(int cnt) { if(cnt == P) solve(); else { vis[cnt] = 1;//第cnt个LED为1 subset(cnt+1); vis[cnt] = 0;//第cnt个LED为0 subset(cnt+1); } } int main() { #ifdef test freopen("in.txt", "r", stdin); #endif // test cin>>T; while(T--) { _max = MAX_P; cin>>P>>N; for(int i = 0;i < N;i++) { for(int j = 0;j < P;j++) cin>>map[i][j]; } subset(0); cout<<_max<<endl; } return 0; }
相关文章推荐
- UVA 11205 - The broken pedometer
- UVA 11205 The broken pedometer
- UVA 11205 The broken pedometer
- UVA 11205 The broken pedometer(子集枚举)
- UVa-11205-The broken pedometer
- uva 11205 The broken pedometer
- UVA 11205 The broken pedometer
- UVa-11205-The broken pedometer
- UVa 11205 - The broken pedometer
- uva 11205 The broken pedometer
- UVA 11205 The broken pedometer
- uva 11205 The broken pedometer
- uva 11205 The broken pedometer
- UVA 11205 The broken pedometer(子集枚举)
- UVa 11205 - The broken pedometer
- UVA - 11205 The broken pedometer
- UVa 11205 - The broken pedometer
- UVA 11205 The broken pedometer
- uva 11205 - The broken pedometer
- UVa 11205 - The broken pedometer