#include<iostream>
#include<algorithm>
#define INF 0x3f3f3f3f //0x3f3f3f3f的十进制是1061109567,可以作为无穷大使用而不致出现数据大于无穷大的情形。
using namespace std;
long long dp[100000];
int w[100000], t[100000], m, n; //w为面值 t为个数 m为凑的钱数 n为硬币的种类数
int main()
{
memset(dp, INF, sizeof(dp)); //全部赋为最大是为了不影响比较。即只需要求最小的即可
dp[0] = 0; //与max中的全部赋为0一样。即只需要求最大的即可
cin >> n;
for (int i = 1; i <= n; i++)
cin >> w[i] >> t[i];
cin >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= t[i]; j++)
for (int k = m; k >= w[i]; k--)
dp[k] = min(dp[k], dp[k - w[i]] + 1);
cout << dp[m] << endl;
return 0;
}
来源:CSDN
作者:FSF_DragonOne
链接:https://blog.csdn.net/qq_40458767/article/details/104823238