bitset

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<bitset>
 4 #include<iostream>
 5 using std::cin;
 6 using std::cout;
 7 using std::endl;
 8 using std::bitset; 
 9 const int maxn = 1e6;
10 bitset<100000> bt[2]; 
11 int a[maxn];
12 int n;
13 int main(){
14     cin >> n;
15     int m = 0;
16     for(int i = 1 ; i <= n ; i ++) {
17         cin >> a[i];
18         m += a[i];
19     }
20     for(int i = 1 ; i <= n ; i ++) {
21         bt[0] = bt[1] | (bt[1] << a[i]);
22         bt[1] = bt[0];
23         bt[1][a[i]] = 1;
24     }
25     for(int i = 1 ; i <= m ; i ++) {
26         if(bt[1][i]) cout<<"exist : "<<i<<endl;
27     }
28     return 0;
29 }

 

子矩阵值最大

枚举竖行上下界,横行记录最大值和次大值

二分答案:枚举值,大于的为一,小于为0

                 找全是1的矩阵O(n^3)->bitset:数1的个数

 

 

logn*(n^2+(n^3)/32)  

 

 

 

 

posted @ 2018-08-29 16:10  lcan  阅读(147)  评论(0编辑  收藏  举报