您的位置:首页 > 其它

牛客练习赛22-C-dp+bitset

2018-07-14 13:26 337 查看

链接: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优化瞎搞。
#include<bits/stdc++.h>
using namespace std;
bitset<1000010>f[2];
int l[110],r[110];
int main(){
int n,i,j,k;
while(cin>>n){
for(i=1;i<=n;++i) cin>>l[i]>>r[i];
f[0][0]=1;
for(i=1;i<=n;++i){
f[i%2]=0;
for(j=l[i];j<=r[i];++j){
f[i%2]|=(f[(i%2)^1]<<(j*j));
}
}
cout<<f[n%2].count()<<endl;
}
return 0;
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: