IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 动态规划-找零钱 -> 正文阅读

[数据结构与算法]动态规划-找零钱

/*
Please enter the total number of coins:23
Please enter the type and number of coins:3
Please enter coin denomination:2 5 10
dp[1]= -1 denomination = Can't scrape together coins!
dp[2]= 1 denomination = 2
dp[3]= -1 denomination = Can't scrape together coins!
dp[4]= 2 denomination = 2 2
dp[5]= 1 denomination = 5
dp[6]= 3 denomination = 2 2 2
dp[7]= 2 denomination = 2 5
dp[8]= 4 denomination = 2 2 2 2
dp[9]= 3 denomination = 2 2 5
dp[10]= 1 denomination = 10
dp[11]= 4 denomination = 2 2 2 5
dp[12]= 2 denomination = 2 10
dp[13]= 5 denomination = 2 2 2 2 5
dp[14]= 3 denomination = 2 2 10
dp[15]= 2 denomination = 5 10
dp[16]= 4 denomination = 2 2 2 10
dp[17]= 3 denomination = 2 5 10
dp[18]= 5 denomination = 2 2 2 2 10
dp[19]= 4 denomination = 2 2 5 10
dp[20]= 2 denomination = 10 10
dp[21]= 5 denomination = 2 2 2 5 10
dp[22]= 3 denomination = 2 10 10
dp[23]= 6 denomination = 2 2 2 2 5 10
The number of coins required is 6
请按任意键继续. . .
*/
# include<stdio.h>
# include<stdlib.h>
int Coins(int n, int * faces, int len);
void Printfaces(int n, int * denomination, int length, int* dp);
int main(void){
?? ?int n, len;
?? ?printf("Please enter the total number of coins:");
?? ?scanf("%d", &n);
?? ?printf("Please enter the type and number of coins:");
?? ?scanf("%d", &len);
?? ?printf("Please enter coin denomination:");
?? ?//硬币的各面值数组
?? ?int * faces = (int*)malloc(sizeof(int)*len);
?? ?for(int i = 0; i < len; i++){
?? ??? ?scanf("%d", &faces[i]);
?? ?}
?? ?printf("The number of coins required is %d\n", Coins(n, faces, len));
?? ?system("pause");
?? ?return 0;
}
int Coins(int n, int * faces, int len){
?? ?if(n < 1 || faces == NULL || len == 0)
?? ??? ?return -1;
?? ?//凑够硬币最少需要的硬币个数
?? ?int * dp = (int*)calloc((n+1), sizeof(int));
?? ?//凑够硬币最后一枚选择的硬币面值
?? ?int * denomination = (int*)malloc(sizeof(int)*(n+1));
?? ?for(int i = 1; i < n + 1; i++){
?? ??? ?int min = INT_MAX;
?? ??? ?for(int j = 0; j < len; j++){
?? ??? ??? ?if(i < faces[j]) continue;
?? ??? ??? ?if(dp[i - faces[j]] < 0 || dp[i - faces[j]] >= min) ?continue;
?? ??? ??? ?min = dp[i - faces[j]];
?? ??? ??? ?denomination[i] = faces[j];
?? ??? ?}
?? ??? ?if(min == INT_MAX){
?? ??? ??? ?dp[i] = -1;
?? ??? ??? ?denomination[i] = 0;
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?dp[i] = min + 1;
?? ??? ?}
?? ??? ?Printfaces(i, denomination, n, dp);
?? ?}
?? ?return dp[n];
}
void Printfaces(int n, int * denomination, int length, int* dp){
?? ?printf("dp[%d]= %d ", n, dp[n]);
?? ?printf("denomination =");
?? ?while(n > 0)
?? ?{?? ?
?? ??? ?if(denomination[n] == 0){
?? ??? ??? ?printf(" Can't scrape together coins!");
?? ??? ??? ?break;
?? ??? ?}
?? ??? ?printf(" %d", denomination[n]);
?? ??? ?//denomination[n]凑够n硬币最后一枚选择的硬币面值, n-denomination[n] 剩下要凑的硬币面值
?? ??? ?n -= denomination[n];
?? ?}
?? ?printf("\n");
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-10 12:08:32  更:2022-05-10 12:09:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:27:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码