plafle @ 2019-04-01 15:24:22
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
long long n,m,a[1005],lsol[(1 << 20)+5]={0},sum=0,lx=0,rx=0,rsol[(1 << 20)+5]={0},l,r,mid,maxx;
void dfs(int c,int ed,int x) {
if (x>m)
return;
if (c==ed+1) {
if (ed==(n >> 1))
lsol[++lx]=x; else
rsol[++rx]=x;
return;
}
dfs(c+1,ed,x);
dfs(c+1,ed,x+a[c]);
}
long long find(int x) {
l=1;
r=rx;
maxx=0;
while (l<=r) {
mid=(l+r) >> 1;
if (x+rsol[mid]<=m) {
maxx=max(maxx,mid);
l=mid+1;
} else
r=mid-1;
}
return maxx;
}
int main() {
scanf("%lld%lld",&n,&m);
for (int i=1; i<=n; i++)
scanf("%lld",&a[i]);
dfs(1,n >> 1,0);
dfs((n >> 1)+1,n,0);
sort(rsol+1,rsol+rx+1);
for (int i=1; i<=lx; i++)
sum+=find(lsol[i]);
printf("%lld",sum);
return 0;
}
by plafle @ 2019-04-01 15:27:52
各位,我把dfs的参数后来改成longlong了 但是还是78分
不知道为什么