社区讨论

求调90分!!!!!

P2842纸币问题 1参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mhjdbzzc
此快照首次捕获于
2025/11/04 00:42
4 个月前
此快照最后确认于
2025/11/04 00:42
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
const int N=1e3+5;
int a[N], dp[N], dpw[N];
bool cmp(int a, int b){
	return b < a;
}
int main () {
	int n, w;
	cin >> n >> w;
	for(int i=1; i<=n; i++) {
		cin >> a[i];
	}
	sort(a+1, a+1+n, cmp);
	dp[1] = w/a[1];
	dpw[1] = w-dp[1]*a[1];
	for(int i=2; i<=n; i++) {
			dp[i] = w/a[i];
			dpw[i] = w-dp[i]*a[i];

		for(int j=1; j<=i-1; j++) {
			if(dpw[j] < a[i]) {
				continue;
			} else if(dp[j]+dpw[j]/a[i] < dp[i]) {
					int k=dpw[j]/a[i];
					dp[i] = dp[j]+k;
					dpw[i] = dpw[j]-k*a[i];
				} 
		}
	}
	int small=2147483645;
	for(int i=1; i<=n; i++) {
		if(dp[i] < small && dpw[i] == 0) {
			small = dp[i];
		}
	}
	cout << small;
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...