You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
1.5 KiB

2 years ago
#include <bits/stdc++.h>
using namespace std;
//极限值,表示不可达
#define INF 0x3f3f3f3f
int dp[20020];
/**
* nT[1:n]使Coins[1:n]
0m20001m
1n10T使Coinsm0m20001m
Input
1n,22T[j]Coins[j]1m
Output
-1
*/
int main() {
//读取数据文件
freopen("../2.txt", "r", stdin);
int n, m;
//初始化数组数据
cin >> n;
int coins[n]; //硬币个数
int value[n]; //硬币面值
for (int i = 0; i < n; i++) {
cin >> value[i] >> coins[i];
}
//初始化DP表
cin >> m;
for (int i = 1; i <= m; i++) {
dp[i] = INF; //赋极大值,表示不可达
}
//利用动态规划进行填表
for (int i = 0; i < n; i++) {
for (int j = 1; j <= coins[i]; j++) { //遍历硬币数量
for (int k = m; k >= value[i]; k--) {
dp[k] = min(dp[k], dp[k - value[i]] + 1);
}
}
}
cout << (dp[m] < m ? dp[m] : -1) << endl;
}