题目链接
这题数据范围比较小,直接暴力转移就好了
这里复习一下bitset可以减小空间
每一位代表能转化的那个数
状态表示
f[i]是bitset
f[i]表示,在前i层里边,f[i]中数为1的位代表可以转化为这个数
状态转移方程
f[i]|=(f[i-1]<<(j*j))
#include<iostream>
#include<bitset>
using namespace std;
const int N = 1000010;
bitset<N>f[105];
int main()
{
int n;
cin>>n;
f[0][0]=1;
for(int i=1;i<=n;i++)
{
int l,r;
cin>>l>>r;
for(int j=l;j<=r;j++)
{
f[i]|=(f[i-1]<<(j*j));
}
}
cout<<f[n].count()<<endl;
}