hdu 4901

暑假培训第一天~
不敢正视的lyd大神…..

然后上手写的第一道题,就这么的打击我…… 真是混不下去了

题意:

有n个数,从n个数中选出两个集合s和集合t,保证原序列中,集合s中的元素都在

集合t中元素的左边。且要求集合s中元素做抑或运算的值与集合t中元素做与运算的

值相等。问能选出多少种这样的集合s和t。

分析:

分析倒不是太难.如题,肯定是2段序列左一段,右一段.左边那一段呢是XoR这个还不算难,因为异或两边就有一样了.方程见代码
右边呢,稍微麻烦一些.
dp[i][j]表示左边界是i,和是j的方案数
就是1.单个他自己,也是一种方案
2.当前的j &a[i] 是i-1 j,和i,.j&a[i]
3.当前的j是i,j+i+1,j[我是倒叙拍的]

但是这样还会有重复的,所以让XOR 那边最后一个数必须被选,防重

Tips define 只是字符的替换,并不能够like const的一样[害惨本人了]@SiriusRen 感谢

瞧代码:

#include<cstdio>  
#include<iostream>  
#include<cstring>  
using namespace std;  
#define mod 1000000007;    //这样是没问题的
typedef long long ll;  
int a[1010];  
int d[1010][1025],f[1010][1025],r[1010][1025];  

int main()  
{  
    int t,n;  
    scanf("%d",&t);  
    while(t--)  
    {  
        scanf("%d",&n);  
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]); 
        }    
        memset(d,0,sizeof(d));  
        /*********************XOR******************/
        d[0][0] = 1;  
        for(int i=1;i<=n;i++)  
        {  
            for(int j=0;j<1024;j++)  
            {  
                d[i][j] = (d[i-1][j]+d[i-1][j^a[i]])%mod;    
            }  
            for(int j=0;j<1024;j++)  
                r[i][j] = d[i-1][j^a[i]];      //去重
        }  
        /***********************AND********************/
        memset(f,0,sizeof(f));  
        for(int i=n;i>=1;i--)  
        {  
            f[i][a[i]]++;  
            for(int j=0;j<1024;j++)  
            {  
                f[i][j&a[i]] = (f[i][j&a[i]]+f[i+1][j])%mod;  
                f[i][j] = (f[i][j]+f[i+1][j])%mod;  
            }  
        }  
        /*************************Solve*********************/
        int ans = 0;  
        for(int i=1;i<=n-1;i++)  
        {  
            for(int j=0;j<1024;j++)  
            {  
                if(r[i][j] && f[i+1][j])
                ans = (ans+(ll)r[i][j]*f[i+1][j])%mod;  
            }  
        }  
        printf("%d\n",ans);  
    }  
    return 0;  
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值