十分钟学会动态规划(简单的)

例题:

假如有 2 块,3 块,7 块面额的纸币,如何使用最小的纸币数量来凑成 100 块。  答案:15

动态规划方程:

十分钟学会动态规划(简单的)

 前十项表格:

 十分钟学会动态规划(简单的)

相信你们看完这俩张图就有一点懂了,数组c存的是最少钱数,i代表钱,数组value代表钱的种类,就像堆积木一样,打好地基,后面的直接调用就行了,下面源码也简单,仅供参考。测试用的没删,但是运行出来很直观。

 

#include"iostream"
using namespace std;
void guib(int c[101],int a[3]){

	for(int q=2;q<=100;q++){
		int xx=1000;
		for(int w=0;w<3;w++){
			c[q]=c[q-a[w]]+1;
			cout<<"c["<<q<<" "<<w<<"]="<<c[q]<<endl;
			if(xx>c[q]){
				xx=c[q];
				cout<<"...."<<xx<<endl;
			}	
		}
		c[q]=xx;
	}
	cout<<c[100];
}
int main(){
	int z[3]={2,3,7};
	int x[101]={0};
	guib(x,z);
	return 0;
}