社区讨论
求调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 条回复,欢迎继续交流。
正在加载回复...