【每日一题】简单瞎搞题

简单瞎搞题

https://ac.nowcoder.com/acm/contest/5556/E


title: 每日一题:简单瞎搞题 (STL)
copyright: true
date: 2020-05-26 17:44:37
tags: STL
category: 每日一题
mathjax: true


题意

一共有 个数,第 个数是 可以取 中任意的一个值。设 ,求 种类数。(0 ~ n,l,r ~ 100)

Solution

表示前 个数能不能组成 ,可以得到转移方程:,最后统计 层组成的 的数量即可。因为 dp 的值只有 0 和 1 ,因此使用 bitset 优化,把第二维看成二进制位,这样就可以用位移的形式来表示加法运算,得到转移方程:,复杂度

Code

#include <bits/stdc++.h>
using namespace std;
bitset<1000005> dp[105];
int main() {
  int n, l, r;
  scanf("%d", &n);
  dp[0][0] = 1;
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", &l, &r);
    for (int j = l; j <= r; j++) dp[i] |= dp[i - 1] << (j * j);
  }
  printf("%lu\n", dp[n].count());
  return 0;
}
全部评论

相关推荐

Twilight_mu:经典我朋友XXXX起手,这是那种经典的不知道目前行情搁那儿胡编乱造瞎指导的中年人,不用理这种**
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务