简单瞎搞题

简单瞎搞题

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-26 19:47
中南大学 Java
悲,毕业了!这是个坏事儿啊!
爱睡觉的冰箱哥:《这是个好事啊》---峰哥浪走天涯
毕业后不工作的日子里我在...
点赞 评论 收藏
分享
每晚夜里独自颤抖:这个在牛客不是老熟人了吗
点赞 评论 收藏
分享
06-13 10:15
门头沟学院 Java
想去夏威夷的大西瓜在...:我也是27届,但是我现在研一下了啥项目都没有呀咋办,哎,简历不知道咋写
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

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