首页 > 学院 > 开发设计 > 正文

【二进制枚举】求在n个数中取任意个数加起来组成x的方案数

2019-11-10 17:58:54
字体:
来源:转载
供稿:网友

问题:n个互不重复的数,通过加法凑出X,求出有多少种方案?(1<=n<=20,1<=X<=2000)

输入格式:n,x,n个整数

思路:由于n并不大,可以使用二进制枚举的方法。简单题,看代码就能够理解

#include <iostream>#include <algorithm>#include <vector>#include <stdio.h>#include <cstring>using namespace std;int num[21];int main(){        int n,x,i,j,temp,tot=0;        scanf("%d%d",&n,&x);        for(i=0;i<n;i++)scanf("%d",&num[i]);        for(i=0;i<(1<<n);i++)        {                temp=0;                for(j=0;j<n;j++)                {                        if(i&(1<<j))//判断二进制i从右数第j+1位是否为1                                temp+=num[j];                }                if(temp==x)tot++;        }        PRintf("%d",tot);}


上一篇:SM2国密算法证书解析

下一篇:排序算法

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表