a无须终有 2021-04-23 09:22 采纳率: 100%
浏览 1098
已结题

动态规划-硬币重量最轻问题

    设有n种不同面值的硬币,第i种硬币的币值是Vi(其中V1=1),重量是Wi,i=1,2,...n且现在购买某种总币值为y的商品,需要用这些硬币付款,如果每种钱币使用的个数不限,那么如何选择付款的方法使得付出钱币的总重量最轻?使用动态规划设计策略设计一个求解该问题的算法。假设问题的输入实例是:

     V1=1, V2=4, V3=6, V4=8

     W1=1, W2=2,W3=4,W4=6

     Y=12

要求输出优化函数表和标记函数表、以及硬币支付方式。

最好用C语言

  • 写回答

4条回答 默认 最新

  • 正在学C++ 2021-04-23 11:38
    关注
    #include<stdio.h>
    void strcpy(int *a, int *b, int Y){
        for(int i=0;i<=Y;i++) *(a+i) = *(b+i);
    }
    void solve(){
            int n; scanf("%d",&n);
            int type[n], weight[n], Y, i, j, k;
            for(i=0;i<n;i++) scanf("%d",&type[i]);
            for(i=0;i<n;i++) scanf("%d",&weight[i]);
            scanf("%d",&Y);
            int Min[Y+1], Min_Path[Y+1], path[n][Y+1];
            for(i=0;i<=Y;i++) Min[i] = 9999;
            Min[0] = 0;
            printf("\n");
            for(j=0;j<n;j++){
                for(i=type[j]; i<=Y; i++)
                    if(Min[i] > Min[i-type[j]]+weight[j]){
                        Min_Path[i] = type[j];
                        Min[i] = Min[i-type[j]]+weight[j];
                    }
                for(k=1;k<=Y;k++) printf("%-3d",Min[k]);
                printf("\n");
                strcpy(path[j],Min_Path,Y);
            }
    
            printf("\n");
            for(i=0;i<n;i++){
                for(j=1;j<=Y;j++)
                    printf("%-3d",path[i][j]);
                printf("\n");
            }
    
            int y=Y;
            printf("\n支付方式:");
            while (y){
                printf("%d ",Min_Path[y]);
                y -= Min_Path[y];
            }
            printf("\n总重量:%d\n",Min[Y]);
    }
    int main(){
        solve();
        return 1;
    }
    /*
    4
    1 4 6 8
    1 3 2 6
    12
     */

     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址
  • ¥15 elmos524.33 eeprom的读写问题
  • ¥15 使用Java milo连接Kepserver服务端报错?
  • ¥15 用ADS设计一款的射频功率放大器
  • ¥15 怎么求交点连线的理论解?
  • ¥20 软件开发方法学习来了
  • ¥15 微信小程序商城如何实现多商户收款 平台分润抽成