日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

动态规划问题中找零问题 --C语言实现

發布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态规划问题中找零问题 --C语言实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.前言

今天又上了一節算法設計與分析課,頭疼,學了動態規劃的思想解決最值問題,行了,不啰嗦了,直接上干貨干吧!!!

二.內容

題目:

三.分析過程

符合動態規劃問題最值問題,故用動態規劃來求解。


1.確定狀態

本題中用一維數組就行,a[i]代表解決問題所用的最少硬幣數(a[i]詳見后續代碼)
當最后一步硬幣面額可以取2,5,7時。前幾枚硬幣(k-1枚硬幣)的幣數為f(25),f(22),f(20).總次數就為f(25)+1,f(22)+1,f(20)+1中最小的值了。(f(25),f(22),f(20)只是變量,目前次數不確定)

2.轉移方程(就是將上面的思路一般化)

3.確定初始條件和邊界情況

f(0)=0很好理解,買一本需要0元,還需要付硬幣嗎?自然是硬幣數自然是0,f(負數)=無窮大,也好理解,當買一本書需要負元時,這種情況當然不存在,(你買一本書,別人還倒貼你錢,孩子你想多,這種美事當然不存在),所以這種情況不可以取,又是用求三個的最小值,所以用正無窮表示。
4.計算順序
(我們倒推,當然正著來求解啊,一般來說,動態規劃問題都是O(n),用數組保留原問題的解)

四.效果圖(本例用10000表示無窮大)

五.代碼(這是我喜歡的一部分,不知道怎么了,今天居然廢話了一堆,噼里啪啦講了一堆,行了,不繼續廢話了,直接肝)

#include<stdio.h> #define M 10000 //M表示無窮 #define Max 1000 int main(){int min(int a,int b,int c);int a[Max];//用來存儲次數int count=0;//計數換行 int f_i2,f_i5,f_i7;int i;//循環變量a[0]=0;for(i=1;i<=27;i++){if((i-2)<0){f_i2=M;}else{f_i2=a[i-2];} if((i-5)<0){f_i5=M;}else{f_i5=a[i-5];} if((i-7)<0){f_i7=M;}else{f_i7=a[i-7];} a[i]=min(f_i2+1,f_i5+1,f_i7+1);}for(i=0;i<28;i++){printf("%d ",a[i]);count++;if(count%5==0){printf("\n");}}return 0; }int min(int a,int b,int c){//求三個數的最小值int min_n;min_n=a<b?a:b;return min_n<c?min_n:c; }

總結

以上是生活随笔為你收集整理的动态规划问题中找零问题 --C语言实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。