题目描述
输入格式
输出格式
样例
数据范围与提示
题意 : 给你 n 个数字,每个数的范围是 a - b , 问将 n 个数字的平方和累加最终的和可能有多少个
思路分析 : 因为所有数据的范围均小于100,会发现最终最大的和是 1000000, 因此一个比较明显的暴力的做法就是 n^2*1000000
代码示例 :
#define ll long long const int maxn = 1e6+5; bitset<maxn>bs[2]; int n; int a[105][2]; void solve(){ bs[0][0] = 1; int k = 1; for(int i = 1; i <= n; i++){ bs[k].reset(); for(int j = a[i][0]; j <= a[i][1]; j++){ bs[k] |= (bs[k^1] << (j*j)); } k ^= 1; } k ^= 1; int ans = 0; for(int i = 0; i <= 1000000; i++) { if (bs[k][i]) ans++; } printf("%d ", ans); } int main() { //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); cin >> n; for(int i = 1; i <= n; i++) scanf("%d%d", &a[i][0], &a[i][1]); solve(); return 0; }