编辑
2024-03-25
noip
00
请注意,本文编写于 177 天前,最后修改于 177 天前,其中某些信息可能已经过时。

目录

一个简单的动态规划题目
题目描述
输入格式
输出格式
样例 #1
样例输入 #1
样例输出 #1
样例 #2
样例输入 #2
样例输出 #2
说明
示例题解

一个简单的动态规划题目

题目描述

假设您是个土豪,身上带了足够的 11 元以及 nn 种奇葩面值的钞票。现在您的目标是凑出某个金额ww,需要用到尽量少的钞票。

输入格式

程序的输入共有两行:
第一行为 22 个整数 nnww
第二行为 nn 个整数 pip_i 代表除了 11 元以外的其他钞票面额

输出格式

一个整数,凑出目标金额使用的最少的钞票数量

样例 #1

样例输入 #1

2 15 5 11

样例输出 #1

3

样例 #2

样例输入 #2

4 99 5 7 20 50

样例输出 #2

6

说明

1n1001 \leq n\leq 100
0w1060 \leq w\leq 10^6

示例题解

cpp
#include <iostream> #include <algorithm> int main() { #ifdef OHTOAI_LOCAL_MACHINE std::freopen("input.txt", "r", stdin); #endif using std::cin; using std::cout; using std::endl; std::ios::sync_with_stdio(false); int f[1000001] = {0}; int money[100]; int n, w; cin >> n >> w; for (int i = 0; i < n; ++i) { cin >> money[i]; } std::sort(money, money + n); for (int i = 0; i < n; ++i) { cout << money[i] << ", "; } cout << endl; for (int i = 2; i <= w; ++i) { int min_cost = f[i - 1] + 1; for (int c = 0; c < n && i >= money[c]; ++c) { auto new_cost = f[i - money[c]] + 1; if(min_cost > new_cost) { min_cost = new_cost; } } f[i] = min_cost; } cout << f[w] << endl; return 0; }

本文作者:OhtoAi

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!