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 #includeview code3 #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 }
待補充...
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兩式左右相加即證。另外的情況也可利用面積的...