牛客練習賽22-C-dp+bitset
阿新 • • 發佈:2018-07-14
load for col 種類數 main n) tps 輸出 分享
鏈接:https://www.nowcoder.com/acm/contest/132/C
來源:牛客網
題目描述
一共有 n個數,第 i 個數是 xi xi 可以取 [li , ri] 中任意的一個值。 設 ,求 S 種類數。輸入描述:
第一行一個數 n。i
然後 n 行,每行兩個數表示 l
,ri。
輸出描述:
輸出一行一個數表示答案。示例1
輸入
復制5 1 2 2 3 3 4 4 5 5 6
輸出
復制26
備註:
1 ≤ n , li
, ri
≤ 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