简单瞎搞题

简单瞎搞题

http://www.nowcoder.com/questionTerminal/89e3ced7ad9b4874959f2b3679ae0bbf

题目描述:
一共有 n个数,第 i 个数是 xi
xi 可以取 [li , ri] 中任意的一个值。
设S=∑xi2,求 S 种类数。

输入描述:
第一行一个数 n。
然后 n 行,每行两个数表示 li,ri。

输出描述:
输出一行一个数表示答案。

思路:
其实是个背包。有n个组,每组选一个数,问最后背包能装的体积有多少种方案。
直接分组背包求解的话。n组,每组最多n个数,最大体积为n^3,复杂度为n^5,显然会TLE。
所以考虑用bitset优化,复杂度为图片说明

#include<bits/stdc++.h>
using namespace std;
bitset<1005000> a,b;
int main(){

    int n;cin>>n;
    a[0]=1;
    while(n--){
        int l,r;
        cin>>l>>r;
        b.reset();
        for(int i=l;i<=r;i++) b |= a<<i*i;
        a=b;
    }
    cout<<a.count();
    return 0;
}

顺手写了一发dp的tle代码

#include<bits/stdc++.h>
using namespace std;
bool dp[1000005];
int main()
{
    dp[0]=1;
    int n;
    cin>>n;
    int flag=0;
    while(n--)
    {
        int l,r;
        cin>>l>>r;
        for(int i=1000000;~i; i--)
        {
            if(dp[i])
            {
                for(int j=l; j<=r; j++)
                {
                    dp[i+j*j]=1;
                }
                dp[i]=0;
            }
        }
    }
    int ans=0;
    for(int i=1; i<=1000000; i++)
        ans+=dp[i];
    cout<<ans;

    return 0;
}
每日一题 文章被收录于专栏

每日一题专栏

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-30 18:19
点赞 评论 收藏
分享
05-20 21:57
已编辑
门头沟学院 Java
喜欢吃卤蛋的悲伤蛙在...:建信融通没消息吧,我2说有实习挂简历不理了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-04 15:20
牛客61197583...:看到室友一个个没怎么学通过关系直接入职或者接到面试,真的很难受。八股不知道背了多少遍,hot100也刷了1.5遍了,但就是没有面试的机会,唉
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

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