• hdu 5119


    题意:给你N个人,然后让你选一些人,然后问你,选的这些人,异或值大于m的方法数有多少个

    思路:dp[i][j]表示前i个人形成j的方法有多少,dp[i][j]=dp[i-1][j]+dp[i-1][j^a[i]],当前形成这个数,可以是前面已经形成的或者是异或当前数

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int N=2e6+5;
     4 int a[50];
     5 int dp[50][N];
     6 set<int >s;
     7 int n,m;
     8 long long  sum;
     9 
    10 int main(){
    11     int t;
    12     scanf("%d",&t);
    13     int tt=1;
    14     while(t--){
    15         scanf("%d%d",&n,&m);
    16         sum=0;
    17         memset(dp,0,sizeof(dp));
    18         memset(a,0,sizeof(a));
    19         for(int i=1;i<=n;i++) {scanf("%d",&a[i]);}
    20         dp[0][0]=1;
    21         int Max=0;
    22         for(int i=1;i<=n;i++){
    23             for(int j=0;j<=1000000;j++){
    24                 dp[i][j]=dp[i-1][j]+dp[i-1][j^a[i]];
    25             }
    26         }
    27         for(int i=m;i<=N;i++) {
    28                 sum+=dp[n][i];
    29         }
    30         printf("Case #%d: ",tt++);
    31         printf("%lld
    ",sum);
    32     }
    33     return 0;
    34 }
  • 相关阅读:
    css动画特效
    http标码集合
    vue的搭建项目
    多功能
    react官方脚手架搭建项目
    深入挖掘分析Go代码
    GoLang AST简介
    GoLang中的逃逸分析简介
    使用Golang实现状态机
    GoLang中的Context
  • 原文地址:https://www.cnblogs.com/hhxj/p/7190263.html
Copyright © 2020-2023  润新知