zoukankan      html  css  js  c++  java
  • HDU5119【dp背包求方案数】

    题意:
    有n个数,问有多少方案满足取几个数的异或值>=m;
    思路:
    背包思想,每次就是取或不取,然后输出>=m的方案就好了。

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const int N=2097150+10;
    
    LL dp[2][N];
    int a[50];
    int n,m;
    
    int main()
    {
        int cas=1;
        int T;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d",&n,&m);
    //        int tmax=0;
    //        int temp=0;
            for(int i=1;i<=n;i++)
            {
                scanf("%d",&a[i]);
    //            temp^=a[i];
    //            if(tmax<temp)
    //                tmax=temp;
            }
            printf("Case #%d: ",cas++);
    //        if(tmax<m)
    //        {
    //            puts("0");
    //            continue;
    //        }
            memset(dp,0,sizeof(dp));
            int k=1;
            dp[1][0]=1;
            for(int i=1;i<=n;i++)
            {
                k=1-k;
                for(int j=0;j<=N-10;j++)
                    dp[k][j]=dp[1-k][j]+dp[1-k][j^a[i]];    //取或不取;
            }
            long long ans=0;
            for(int i=m;i<=N-10;i++)
                ans+=dp[k][i];
            printf("%lld
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    区域赛
    kd树的创建和求最近邻
    Fliptile POJ
    第六周作业
    第四次作业
    第三次作业
    第二周作业
    第一次作业
    董雅洁 我的第0次作业
    21 UI_布局 之 线性布局 xml配置方式
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934777.html
Copyright © 2011-2022 走看看