算法__运用动态规划实现币值最大化问题

来源:互联网 发布:有赞api php 调用实例 编辑:程序博客网 时间:2024/06/05 07:31

问题来源:算法设计与分析基础第三版8.1 例1
问题:给定一排n个硬币,其面值均为整数c1, c2, …, cn, 这些整数并不一定两两不同。问如何选择硬币,使得在其原始位置互不相邻的条件下,所选硬币的总金额最大。
分析:最基本的回溯,说白了就是反复比较第一枚加第三枚数值大还是第二枚硬币数值大,然后大的数值赋给下一次比较的第一枚硬币。

C语言代码实现

//计科四班 吴鹏 //动态规划求币值最大问题  #include<stdio.h>#define MAX 6int main(void){    int i;    int c[MAX],f[MAX];    c[0]=0;     printf("输入硬币面值:\n");    for(i=1;i<=MAX;i++)//这里i是从1开始     scanf("%d",&c[i]);    f[0]=0;f[1]=c[1];    for(i=2;i<=MAX;i++)     f[i]=(c[i]+f[i-2])>f[i-1]?(c[i]+f[i-2]):f[i-1];    printf("最大币值为:%d",f[MAX]);} 

运行截图

0 0