首页 > 其他分享 >1102 HAOI2008, 硬币购物

1102 HAOI2008, 硬币购物

时间:2024-12-18 19:43:19浏览次数:3  
标签:cnt idx 硬币 int sum long 1102 dp HAOI2008

// 1102 HAOI2008, 硬币购物.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

/*
http://oj.daimayuan.top/course/22/problem/1180

共有 4种硬币。面值分别为 c1,c2,c3,c4。
某人去商店买东西,去了 n次,对于每次购买,他带了 di枚 i种硬币,想购买 s的价值的东西。
请问每次有多少种付款方法。

输入格式
输入的第一行是五个整数,分别代表 c1,c2,c3,c4,n。
接下来 n行,每行有五个整数,描述一次购买, d1,d2,d3,d4,s。
对于 100%的数据,保证 1≤ci,di,s≤105,1≤n≤1000。

输出格式
对于每次购买,输出一行一个整数代表答案。

样例输入1
1 2 5 10 2
3 2 3 1 10
1000 2 2 2 900
样例输出1
4
27
*/

#include <iostream>


using namespace std;

long long dp[100010];
int C[5];
int D[5];
int S;
int T;

long long ans;

void dfs(int idx, int cnt, long long sum) {
	if (idx == 4) {
		if (sum > S) return;
		if (cnt % 2 == 0) {
			ans += dp[S - sum];
		}
		else {
			ans -= dp[S - sum];
		}
		return;
	}

	dfs(idx + 1, cnt, sum);
	dfs(idx + 1, cnt + 1, sum + (D[idx] + 1)* C[idx]);
}



void solve() {
	ans = 0;
	for (int i = 0; i < 4; i++) cin >> D[i];
	cin >> S;

	dfs(0, 0, 0);

	cout << ans << endl;
	return;
}


int main() {
	for (int i = 0; i < 4; i++ ) cin >> C[i];
	cin >> T;
	dp[0] = 1;
	for (int i = 0; i < 4; i++) {
		for (int j = C[i]; j <= 100000; j++) {
			dp[j] += dp[j - C[i]];
		}
	}

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

	return 0;
}

标签:cnt,idx,硬币,int,sum,long,1102,dp,HAOI2008
From: https://www.cnblogs.com/itdef/p/18615735

相关文章

  • 用fpc trunk(3.3.1) 编译TMS FNC控件时出现INTERNAL 20231102
    由于fpc trunk一直在增强及调整,用不同时间段的fpc都可能存在兼容问题,如这次用fpctrunk(3.3.1)编译TMSFNC控件时出现Internal20231102,之前的能通过编译的。用最新的fpc编译LCLTMSFNCCorePkg.lpk时出现以下错误: 在fpc源码发现以下一段文字:如果使用泛型等复杂的情况下,locals......
  • LeetCode题练习与总结:排列硬币--441
    一、题目描述你总共有 n 枚硬币,并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯,其第 i 行必须正好有 i 枚硬币。阶梯的最后一行 可能 是不完整的。给你一个数字 n ,计算并返回可形成 完整阶梯行 的总行数。示例1:输入:n=5输出:2解释:因为第三行不完......
  • 2024-12-01:单面值组合的第 K 小金额。用go语言,给定一个整数数组 coins,表示不同面值的
    2024-12-01:单面值组合的第K小金额。用go语言,给定一个整数数组coins,表示不同面值的硬币,同时给出一个整数k。你可以使用任意数量的这些硬币,但不能将不同面值的硬币组合在一起。请返回可以用这些硬币构成的第k个最小金额。1<=coins.length<=15。1<=coins[i]<=2......
  • P11024 [COTS 2020] 定序 Redoslijed 题解
    先把是否有色的约束处理掉。累一个前缀和,对每个位置判一下即可。考察区间覆盖的性质,显然最后一个操作的区间内的颜色一定与其覆盖的颜色相同。考虑从后往前确定操作的顺序,一个操作只要满足这个条件就可以作为当前的最后一个操作,如果有多个满足条件的操作,随便取一个都合法。考虑......
  • 手写一个使用css3旋转硬币的效果
    <!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>CSS3旋转硬币</title><style>body{background-color:#f0f0f0;display:flex;justify-content:center;align-items:center;min-height:......
  • C++解决:翻硬币、飞行员兄弟、费解的开关
    1.翻硬币小明正在玩一个“翻硬币”的游戏。桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零),比如可能情形是 **oo***oooo,如果同时翻转左边的两个硬币,则变为 oooo***oooo。现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能......
  • 霍夫圆型硬币检测Matlab程序
    1.图像读取和预处理使用MATLAB的uigetfile函数读取图像,可以从文件系统中选择图像文件。读取的图像随后经过灰度化处理,将彩色图像转换为灰度图像,以降低计算复杂度并去除不必要的颜色信息。 2.中值滤波在图像预处理过程中,使用中值滤波来去除噪声。中值滤波是一种非线性滤波......
  • P11022 「LAOI-6」Yet Another Graph Coloration Problem
    P11022「LAOI-6」YetAnotherGraphColorationProblem-洛谷|计算机科学教育新生态(luogu.com.cn)关于无解情况,如果这个图有两块连通块,那么不可能同时有黑色白色,假设\(1,2\)连通块,设\(1\)中有黑色,因为\(2\)中点不能到\(1\),所以\(2\)中只能是黑色,又因为\(2\)中......
  • 题解:P11020 「LAOI-6」Radiation
    我们发现一种最优策略,把石头按照斜线摆,即(1,1),......
  • P11020 「LAOI-6」Radiation 题解
    一道简单的构造题,其实不用想的十分复杂的说。首先,最多发射的宇宙射线\(sum\)也最多为\(sum_{max}=min(m,n)\)也就是说,无论如何摆放石子,也只能达到这个数量。那么我们的目的便变成了如何让石子变成这一个形状。如上图,在一个\(3\times6\)的矩阵中,其实只要三颗石子即可满足......