二进制拆分怎么写不出来呢..测试示例过不去
查看原帖
二进制拆分怎么写不出来呢..测试示例过不去
1180143
Touris2ts楼主2024/1/4 16:01
#include <bits/stdc++.h>
  
 using namespace std;
array<int, 4> prices;
void preProcess(){

}



void solve(){
    array<int, 5> s;
    for (int i = 0; i < 5; ++i){
        cin >> s[i];
    }

    vector<long long> p;
    for (int i = 0; i < 4; ++i){
        int k = 1;
        while (s[i] >= k){
            s[i] -= k;
            p.emplace_back(1ll * prices[i] * k);
            k <<= 1;
        }
        if (s[i] > 0){
            p.emplace_back(1ll * prices[i] * s[i]);
        }
    }

    vector<long long> dp(s[4] + 1);
    dp[0] = 1;
  //  for (auto x : p)cout << x << endl;
    for (const auto& value : p){
        for (int j = s[4]; j >= value; --j){
            dp[j] += dp[j - value];
        }
    }

    cout << dp[s[4]] << "\n";
}


int main(){
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    int tc = 1;

    for (int i = 0; i < 4; ++i){
        cin >> prices[i];
    }
    cin >> tc;

    preProcess();

    while (tc--){
        solve();
    }

    return 0;
}

2024/1/4 16:01
加载中...