Description
一共有nnn个数,第 iii 个数是 xix_ixi ,xix_ixi 可以取 [li,ri][l_i , r_i][li,ri] 中任意的一个值。 设S=∑xi2S=\sum x_i^2S=∑xi2,求SSS种类数。
Input
第一行一个数nnn。
然后 nnn 行,每行两个数表示 li,ril_i,r_ili,ri。
(1≤n,li,ri≤100)(1\le n,l_i,r_i\le 100)(1≤n,li,ri≤100)
Output
输出一行一个数表示答案。
Sample Input
5
1 2
2 3
3 4
4 5
5 6
Sample Output
26
Solution
010101背包,背包体积1003100^31003,时间复杂度O(1005)O(100^5)O(1005),用bitsetbitsetbitset优化一下复杂度为O(100532)O(\frac{100^5}{32})O(321005)
Code
#include<cstdio>
#include<bitset>
using namespace std;
bitset<1000005>b[105];
int n,l[105],r[105];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d%d",&l[i],&r[i]);
b[0].set(0);
for(int i=1;i<=n;i++)
for(int j=l[i];j<=r[i];j++)
b[i]|=(b[i-1]<<(j*j));
printf("%d\n",b[n].count());
return 0;
}