十分钟学会动态规划(简单的)
例题:
假如有 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;
}