• 动态规划+ 背包问题


     1 /*
     2 公司发了某商店的购物券1000元,限定只能购买店中的m种商品。每种商品的价格分别为m1,m2,…,要求程序列出所有的正好能消费完该购物券的不同购物方法。
     3 
     4 
     5 整个问题的思路就是数学上的进制*/
     6 
     7 #include<stdio.h>
     8 #include<malloc.h>
     9 typedef struct Totalprice    // 结构体 
    10 {
    11     int price;  //单价
    12     int count;   //数量
    13     int max_value;   //最大个数
    14 }totalprice;
    15 
    16 int m;
    17 totalprice *unit;
    18 
    19 //先判断个位上的数 ,是否已满,若满的话。就要向十位的数进一个,(也要判断十位上的数是否也已满),一直到最后一位数达到最大值。
    20 int panduan(int i)
    21 {
    22     if(((unit+i)->count>(unit+i)->max_value)&&(unit+m-1)->count<=(unit+m-1)->max_value)
    23     {
    24         (unit+i)->count=0;
    25         ++(unit+(++i))->count;
    26         panduan(i);
    27     }
    28     else
    29         return;
    30 }
    31 
    32 
    33 void main()
    34 {
    35     int i,j=0;
    36     int sum=0;
    37     printf("请输入可购买的商品种类:");
    38     scanf("%d",&m);
    39     //动态的申请内存空间
    40     unit=(totalprice *)malloc(sizeof(totalprice)*m);
    41 
    42     //初始化数据
    43     for(i=0;i<m;i++)
    44     {
    45         scanf("%d",&(unit+i)->price);
    46         (unit+i)->count=0;
    47         (unit+i)->max_value = 1000/(unit+i)->price;
    48     }
    49     printf("\n");
    50     for(i=0;i<m;i++)
    51     {
    52         printf("price=%d  ",(unit+i)->price);
    53         printf("max_value=%d\n",(unit+i)->max_value);
    54     }
    55 
    56     //操作
    57     while((unit+m-1)->count<=(unit+m-1)->max_value)
    58     {
    59         ++(unit)->count;
    60         panduan(0);
    61         for(i=0;i<m;i++)   // 将每个方案 计算总价 ,然后与1000相比较
    62             sum+=(unit+i)->price*(unit+i)->count;
    63         if(sum == 1000)
    64         {
    65             for(i=0;i<m;i++)
    66                 printf("%5d",(unit+i)->count);
    67             printf("\n"),j++;
    68         }
    69         else
    70             sum = 0;
    71     }
    72     printf("\n总共方案: %d\n",j);
    73     getch();
    74 }
  • 相关阅读:
    barcode制作条形码及破解
    软件敏捷架构师
    软件需求分析三步走
    GDI+显示GIF动画
    CSpinButtonCtrl的弱智问题
    [C++] STL里面的map
    [C#] 再议Exception
    [C++] unsigned是麻烦制造者
    用GDI+转BMP为WMF、EXIF、EMF格式
    [C++] 编译时的warning
  • 原文地址:https://www.cnblogs.com/zychengzhiit1/p/2623394.html
Copyright © 2020-2023  润新知