zoukankan      html  css  js  c++  java
  • 找零问题-完全背包

    问题描述

    100元钱,有几种零钱,比如1元,5元,10元,求有几种组合

    分析

    时间复杂度O(m*n),空间复杂度O(n),完全背包问题

    代码如下

     1 #include <stdio.h>
     2 #define N 100
     3 int a[N + 5]; 
     4 int change[4]; //有几种零钱
     5 //主功能函数,找到一共需要几种零钱
     6 int findCount(int money, int countOfChange)
     7 {
     8     int i, j;
     9     a[0] = 1;
    10     for (i = 1; i <= countOfChange; i++)
    11     {
    12         for (j = change[i]; j <= money; j++)
    13         {
    14             //核心的代码,就此一句
    15             a[j] = a[j] + a[j - change[i]];
    16         }
    17         /*
    18         //去掉注释,可打印每一步的情况
    19         for (j = 0; j <= money; j++)
    20             printf("%d	", a[j]);
    21         puts("");*/
    22         
    23     }
    24     return a[money];
    25 }
    26 int main()
    27 {
    28     int money, num, count, i;
    29     money = 6;
    30     num = 3;
    31     //一系列输入
    32     printf("input the money u have: ");
    33     scanf("%d", &money);
    34     printf("input the kinds of changes: ");
    35     scanf("%d", &num);
    36     for (i = 1; i <= num; i++)
    37     {
    38         printf("the %dth change: ", i);
    39         scanf("%d", &change[i]);
    40     }
    41     count = findCount(money, num);
    42     printf("the count is %d.
    ", count);
    43     return 0;
    44 }
  • 相关阅读:
    (73)C# 扩展方法
    网络
    (十九)守护进程
    (十二)函数返回局部变量
    (十八)WireShark 过滤语法
    (十七)linux网络命令 vconfig ifconfig
    (十六)getsockname()
    (十五)ioctl、ifreq、ifconf
    (十四)UDP协议的两个主要方法sendto和recvfrom详解
    (十三)Packet socket 和 sockaddr_ll
  • 原文地址:https://www.cnblogs.com/chuanlong/p/3234705.html
Copyright © 2011-2022 走看看