bitset在acm中的應用

2022-04-30 10:03:11 字數 1208 閱讀 9254

ps:最近碰到一些用bitset優化常數的題目,以前也有接觸但是都沒有記下來,所以來寫一篇博文 記錄以後碰到的類似的題目。

應用一: 優化boolean multiplication

在做dp的時候,有時候會需要將兩個dp矩陣相乘,且矩陣的元素都是bool型。

計算矩陣a*b=c     c[i,j]=1 當且僅當存在k,a[i,k]=1 && b[k][j]=1 。

直接算需要o(n3)的時間。可以用bitset 優化常數。 做法如下:

1 bitseta[n],b[n],c[n];23

void multi(bitseta,bitsetb,bitsetc)411

}12 }

大致思想是:

如果a[i][j]=1,  c[i][k] |= a[i][j] & b[j][k]      c[i][k] |= b[j][k]     相當於把b的第j行拿去 和c的第i行做一次或操作。

題目:該題的dp矩陣是boolean矩陣,轉移的時候可以用bitset來優化boolean multiplication。

1 #include 2 #include 

3 #include 4 #include 5 #include 6 #include

7 #include 8

using

namespace

std;

910 typedef long

long

ll;11

12#define n 510

1314 bitsetdp[61][2

][n];

1516

intmain()

1728

29for (int l=1;l<=60;l++)

3038}39

}40 ll ans=0; set

s; s.insert(0

);41

for (int l=60,w=0;l>=0 && ans<=1e18;l--)

4249

if (!ss.empty()) ans+=1ll<1;50

}51if (ans>1e18) ans=-1

;52 printf("

%i64d\n

",ans);

53return0;

54 }

view code

待補充...

STL在ACM中的應用

stl 提供三種型別的元件 容器 迭代器和演算法,它們都支援泛型程式設計標準。在acm中充分利用stl可以大大的簡化程式,提高解題效率。1 容器主要有兩類 順序容器和關聯容器。順序容器 vector list deque string 等是一系列元素的有序集合。關聯容器 set multiset m...

叉積在ACM中的應用

若o a x1,y 1 ob x2 y 2 oa x1,y1 ob x2,y2 定義叉積 oa 如圖是一種簡單情況,叉積表示的面積即最大的矩形面積減去p 1p 2 t 3 p1p2t3 所構成的矩形面積。又t 4 s 4 t4 s4 即要證 2 t1 t 2 t3 s 1 t 1 s 2 t 2 2...

叉積在ACM中的應用

若 定義叉積 x1y2 x2y1 如圖是一種簡單情況,叉積表示的面積即最大的矩形面積減去 p1p2t3所構成的矩形面積。又t4 s4,即要證2 t1 t2 t3 s1 t1 s2 t2,又已知s1 p1 t1 t3 p2,and s2 p2 t2 t3 p1兩式左右相加即證。另外的情況也可利用面積的...