80求调awa
查看原帖
80求调awa
1017932
hxjus楼主2025/1/10 15:30
#include <iostream>
#include <algorithm>
#define int unsigned long long
using namespace std;

int n , m , v[105] , a[1000005] , b[1000005] , n2 , cura , curb , n1;
void dfsa(int x , int sum)
{
    if(x == n1 + 1) 
    {
        if(sum <= m)
            a[++cura] = sum;
        return;
    }
    dfsa(x + 1 , sum);
    dfsa(x + 1 , sum + v[x]);
}
void dfsb(int x , int sum)
{
    if(x == n2 + 1) 
    {
        if(sum <= m)
            b[++curb] = sum;
        return;
    }
    dfsb(x + 1 , sum);
    dfsb(x + 1 , sum + v[x + n1]);
}
signed main()
{
    cin >> n >> m;
    for(int i = 1; i <= n; i++) cin >> v[i];
    n1 = n / 2;
    dfsa(1 , 0);
    n2 = n - n1;
    dfsb(1 , 0);
    sort(a + 1 , a + cura + 1);
    int cnt = 0;
    for(int i = 1; i <= curb; i++)
        cnt += upper_bound(a + 1 , a + cura + 1 , m - b[i]) - a - 1;
    cout << cnt;
    return 0;
}
2025/1/10 15:30
加载中...