社区讨论
P2842题解
P2842纸币问题 1参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mkp3xofx
- 此快照首次捕获于
- 2026/01/22 15:05 4 周前
- 此快照最后确认于
- 2026/01/22 15:14 4 周前
经典动态规划
题目分析:
给出n张纸币,要求用最少的张数凑出w金额。此时局部最优解未必是全局最优解比如w=15,有三张纸币对应金额分别是1,5,11。此时应该用动态规划从0推到w的答案。
代码:
CPP#include<iostream>
#include<vector>
#include<algorithm>
#include <climits>
using namespace std;
int main()
{
int n,w;
cin>>n>>w;
vector<int> a(n);
for(int &c:a) cin>>c;
vector<int> dp(w+1,INT_MAX);//表示不同金额时的最小张数
dp[0]=0;
for(int num:a)
{
for(int j=num;j<=w;j++)
{
if(dp[j-num]!=INT_MAX) dp[j]=min(dp[j],dp[j-num]+1);
}
}
cout<<dp[w]<<endl;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...