zoukankan      html  css  js  c++  java
  • HDU 5119

    被一个学长逼着做的题。。。谢谢他了~  题中dp[i][j] i即为第i个数,j为当前输入的数能xor到的数

    同时一个数有两种选择,1.not xor  2.xor

    最大的j不会超过11...11b(20个)=1048575   题目中用了1050000

     1 #include <stdio.h>
     2 #include <string.h>
     3 #define MM 50
     4 __int64 dp[MM][1050000];
     5 int num[MM];
     6 int main()
     7 {
     8     int n,m,t,j,i;
     9     scanf("%d",&t);
    10     for(int cas=1;cas<=t;cas++)
    11     {
    12         __int64 ans=0;
    13         memset(dp,0,sizeof (dp));
    14        
    15         scanf("%d %d",&n,&m); 
    16         dp[0][0]=1;
    17         for( i=1;i<=n;i++)
    18         {
    19             scanf("%d",&num[i]);
    20         }
    21         for(i=1;i<=n;i++)
    22         {
    23             for(j=0;j<1050000;j++)
    24             {
    25                 dp[i][j]+=dp[i-1][j];   //not xor
    26                 long long nj=j^num[i];
    27                 dp[i][nj]+=dp[i-1][j];  //xor
    28             }
    29         }
    30         for(i=m;i<1050000;i++)
    31         {
    32             ans+=dp[n][i];
    33         }
    34 
    35         printf("Case #%d: %I64d
    ",cas,ans );
    36 
    37     }
    38     return 0;
    39 }
  • 相关阅读:
    函数如何命名
    jsp/servlet
    hibernate主键生成策略
    Java项目经验(ssh)
    jvm的内存区划分
    @Override
    Java成长简介(转载)
    接口 转载
    SpringBoot项目jar、war方式的部署
    服务注册与发现及其优雅停服
  • 原文地址:https://www.cnblogs.com/sylvialucy/p/4135547.html
Copyright © 2011-2022 走看看