loj515 贪心只能过样例
题目描述
一共有 nnn个数,第 iii 个数 xix_ixi 可以取 [ai,bi][a_i , b_i][ai,bi] 中任意值。
设 S=∑xi2S = \sum{{x_i}^2}S=∑xi2,求 SSS 种类数。输入格式
第一行一个数 nnn。
然后 nnn 行,每行两个数表示 ai,bia_i,b_iai,bi。输出格式
输出一行一个数表示答案。
样例
样例输入
5 1 2 2 3 3 4 4 5 5 6
样例输出
26
数据范围与提示
1≤n,ai,bi≤1001 \le n , a_i , b_i \le 1001≤n,ai,bi≤100
f[i][j] : 前i个位置能否组成j
然后这个会TLE
用bitset优化一下
bitset的第i位表示i是否存在
那么整体加上j*j就相当于左移j*j位
然后就A了
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <map> #include <set> #include <vector> #include <queue> #include <cmath> #include <cctype> #include <string> #include <cfloat> #include <stack> #include <cassert> #include <bitset> using namespace std; int a, b, n; bitset<1000010> f[110]; int main() { scanf("%d", &n); f[0] = 1; for(int i = 1 ; i <= n ; i ++) { scanf("%d%d", &a, &b); for(int j = a ; j <= b ; j ++) { f[i] |= f[i - 1] << (j * j); } } printf("%lu\n", f[n].count()); }