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());
}


浙公网安备 33010602011771号