题目描述:
链接:https://ac.nowcoder.com/acm/contest/5556/E
来源:牛客网
一共有 n个数,第 i 个数是 xi
xi 可以取 [li , ri] 中任意的一个值。
设 S = \sum{{x_i}2}S=∑xi2 ,求 S 种类数。
输入描述:
第一行一个数 n。
然后 n 行,每行两个数表示 li,ri。
输出描述:
输出一行一个数表示答案。
实例1:
输入:
5
1 2
2 3
3 4
4 5
5 6
输出:
26
备注:
1 ≤ n , li , ri ≤ 100
思路:
二进制模拟问题,01背包
代码:
#include<iostream>
#include<bitset>
using namespace std;
const int maxn = 1e6 + 2;
bitset<maxn> a, b;
int l[maxn], r[maxn];
int main()
{
int n;
int i, j;
cin >> n;
for (i = 0; i < n; ++i)
{
cin >> l[i] >> r[i];
}
a.reset();
a[0] = 1;
for (i = 0; i < n; ++i)
{
b.reset();
for (j = l[i]; j <= r[i]; ++j)
{
b |= a << (j * j);
}
a = b;
}
cout << a.count() << endl;
return 0;
}