硬币问题

Posted shirlybaby

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了硬币问题相关的知识,希望对你有一定的参考价值。

无限硬币问题

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<stack>
#include<cstdio>
#include<queue>
#include<map>
#include<vector>
#include<set>
using namespace std;
const int maxn=1010;
const int INF=0x3fffffff;
typedef long long LL;
LL a[210];
int n,m;
//无限硬币问题 
int b[100001];
int main(){
	cin>>n>>m;
	for(int i=0;i<n;i++) cin>>a[i];
	for(int i=1;i<=m;i++) b[i]=INF;
	b[0]=0; 
	for(int i=0;i<n;i++){
		for(int j=a[i];j<=m;j++){
			b[j]=min(b[j],b[j-a[i]]+1);
		}
	}
	for(int i=1;i<=m;i++) cout<<b[i]<<endl;
return 0;
}

有限硬币问题

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<stack>
#include<cstdio>
#include<queue>
#include<map>
#include<vector>
#include<set>
using namespace std;
const int maxn=1010;
const int INF=0x3fffffff;
typedef long long LL;
//有限硬币问题
int num[110];
int val[110];
int b[10001];
int n,m; 
int main(){
	cin>>n>>m;
	for(int i=0;i<n;i++) cin>>val[i];
	for(int i=0;i<n;i++) cin>>num[i];
	for(int i=1;i<=m;i++) b[i]=INF;
	b[0]=0;
	for(int i=0;i<n;i++){
		for(int j=1;j<=num[i];j++){
			for(int z=m;z>=val[i];z--){
				b[z]=min(b[z],b[z-val[i]]+1);
			}
		}
	}
	for(int i=1;i<=m;i++) {
		if(b[i]==INF) cout<<"-1"<<endl;
		else cout<<b[i]<<endl;
		} 
return 0;
}

  

以上是关于硬币问题的主要内容,如果未能解决你的问题,请参考以下文章

吸引硬币的磁力效应

用偏硬币模拟抛硬币的程序

最小硬币找零问题 - 回溯

硬币游戏---代码分析与改进

寻找最低硬币总量的最佳变化

软工作业: 硬币游戏—— 代码分析与改进