zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    「分块」学习笔记
    「NOIP 2017」逛公园
    大假期集训模拟赛15
    大假期集训模拟赛14
    大假期集训模拟赛13
    nginx 日志升级
    nginx 日志切割
    nginx 健康检查
    sftp 管理
    Prometheus 学习
  • 原文地址:https://www.cnblogs.com/hhxj/p/7190263.html
Copyright © 2011-2022 走看看