| 比赛 | 2022级数学专题练习赛10 | 评测结果 | AAAAAAAAAA | 
    | 题目名称 | 硬币购物 | 最终得分 | 100 | 
    | 用户昵称 | HeSn | 运行时间 | 0.000 s | 
    | 代码语言 | C++ | 内存使用 | 0.00 MiB | 
    | 提交时间 | 2023-04-12 20:37:25 | 
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN = 100010;
int a[5], b[5], f[MAXN];
signed main() {
	freopen("coin.in", "r", stdin);
	freopen("coin.out", "w", stdout);
    int t;
	for(int i = 1; i <= 4; i ++) {
		cin >> a[i];
	}
    f[0] = 1;
    for(int i = 1; i <= 4; i ++) {
    	for(int j = a[i]; j <= MAXN; j ++) {
    		f[j] += f[j - a[i]];
    	}
    }
    cin >> t;
    for(int tt = 1; tt <= t; tt ++) {
        int sum, ans = 0;
        for(int i = 1; i <= 4; i ++) {
        	cin >> b[i];
        }
        cin >> sum;
        for(int i = 0; i <= 15; i ++) {
            int t = sum, flg = 0;
            for(int j = 1; j <= 4; j ++) {
            	if((i >> (j - 1)) & 1) {
            		t -= a[j] * (b[j] + 1);
					flg ^= 1;
            	}
            }
            if(t < 0) {
            	continue;
            }
            if(!flg) {
            	ans += f[t];
            }
			else {
				ans -= f[t];
			}
        }
        cout << ans << endl;
    }
    return 0;
}