题目描述:
给你n个钱币,每个钱币不仅有面值,还有重量,问最少多重的钱币可以恰好使得钱数为S?
输入格式
第一行:2个整数n,s,范围在[1 100]。
第二行:n个整数表示钱币相应的面值,每个数范围在[1, 100]
第三行:n个整数钱币相应的重量,每个数范围在[1, 10000]
输出格式
最少重量。(如果没有方案输出-1)
输入/输出例子1
输入:
6 8
3 2 3 7 2 1
5 3 5 13 3 1
输出:
12
样例解释
提示
【样例解释】:
8=3+2+2+1,重量=5+3+3+1=12。
解析:
这道题有点像另一道货币系统,简单修改即可:
代码:#includeusing namespace std; int n,s; int a[105],b[110];; long long dp[1005]; int main() { cin >> n >> s; for (int i=0;i > a[i]; for(int i=0;i >b[i]; memset(dp, -1, sizeof(dp)); dp[0]=0; for (int i = 0; i < n; i++) for (int j = s; j >= a[i]; j--) if (dp[j-a[i]]>=0) { if (dp[j]==-1) dp[j]=dp[j-a[i]]+b[i]; else dp[j]=min(dp[j],dp[j-a[i]]+b[i]); } cout<



