1. 程式人生 > >牛客練習賽22-C-dp+bitset

牛客練習賽22-C-dp+bitset

load for col 種類數 main n) tps 輸出 分享

鏈接:https://www.nowcoder.com/acm/contest/132/C
來源:牛客網

題目描述

一共有 n個數,第 i 個數是 xi xi 可以取 [li , ri] 中任意的一個值。 設 技術分享圖片,求 S 種類數。

輸入描述:

第一行一個數 n。 
然後 n 行,每行兩個數表示 l
i
,r
i

輸出描述:

輸出一行一個數表示答案。
示例1

輸入

復制
5
1 2
2 3
3 4
4 5
5 6

輸出

復制
26

備註:

1 ≤ n , l
i
 , r
i
 ≤ 100

推出了方程但是復雜度太高想不出優化,後來才知道是bitset,一直沒用過這個= =

  f[i][j]表示累加完第i個數之後S為j是否可行,由於只涉及0和1所以考慮bitset優化瞎搞。
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 bitset<1000010>f[2];
 4 int l[110],r[110];
 5 int main(){
 6     int n,i,j,k;
 7     while(cin>>n){
 8         for(i=1;i<=n;++i) cin>>l[i]>>r[i];
 9         f[0][0]=1;
10         for(i=1;i<=n;++i){
11             f[i%2]=0
; 12 for(j=l[i];j<=r[i];++j){ 13 f[i%2]|=(f[(i%2)^1]<<(j*j)); 14 } 15 } 16 cout<<f[n%2].count()<<endl; 17 } 18 return 0; 19 }

牛客練習賽22-C-dp+bitset