目录
前言
哈哈我也没有想到,元旦会直接再次发一篇刷题博客,但是趁热打铁嘛,因为这一个题目的模板和上一次发文的模板一模一样:上一次博客链接。接下来给大家带来的北京交通大学新生赛第九届的题目,当时做题目的时候发现真的非常的亲切。
题目描述
解题思路
这一题本身就是很明显的子集求和的问题,而且由于n<=20的缘故,因此本题利用上文所说的位运算是一个再好不过的枚举写法了,每一次子集进行求和,只要等于目标值就让最终的结果+1,最终输出结果就好了
AC代码
#include<bits/stdc++.h>
using namespace std;
long long a[25];
long long m;
int n;
int ans=0;
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
cin>>a[i];
int u=1<<n;
for(int i=0;i<u;i++)
{
long long sum=0;
for(int j=0;j<n;j++)
{
if(i&(1<<j))
sum+=a[j];
}
if(sum==m)
ans++;
}
cout<<ans<<endl;
}
AC凭证
广告时间
给大家推荐一下交大的oj网站,虽然还在成长中吧,但是还是有很多学长学姐出的好题的!