zoukankan      html  css  js  c++  java
  • Ka的递归编程练习 Part6|简单背包问题,拒绝动规从我做起

     1 #include <stdio.h>
     2 #define M 10 
     3 int w[M]={1,3,5,7,9,11,13,15,17,19};
     4 int backpack(int n,int s) //n代表容量,s代表物品个数
     5 {
     6     if(n==0)    return 1;   //如果刚好装完,此支线满足条件,返回1 
     7     else if(n<0||s<=0) return 0;  //此条支线出现了装一个重量超过限额或全部用完也未装满,返回0 
     8     else if(backpack(n-w[s-1],s-1)==1)  //此条支线传来好消息,输出并往上一层返回1 
     9     {                                   //此时注意下表是s-1,否则将越界 
    10         printf("bp:No.%d,weight %d.
    ",s,w[s-1]);
    11         return 1;
    12     }
    13     else return backpack(n,s-1);  //如果这个物品并未出现以上情况,就跳过,n不变 
    14 } 
    15 int main()
    16 {
    17     if(backpack(80,M)!=1) printf("No result.");  //当成功时返回1,所以不返回1时输出无解。 
    18     return 0;
    19 }

    差不多就是上面这样了,注释那么多就不多解释了吧~

    问题的话:有一个背包,容量为n,现有s件物品,重量为w1,w2,w3,...,ws,求一组刚好能放完背包的组合解。如

    w为{1,3,5,7,9},n为11时,解为w1:1   w2:3   w4:7

  • 相关阅读:
    设计模式之_6大设计原则(转)
    Django-ORM多表操作(进阶)
    03-django模型(1)
    02-Django基础知识
    web开篇
    body标签中的相关标签
    01-前端初识
    Flask简述
    浅析设计模式
    Python的单例模式
  • 原文地址:https://www.cnblogs.com/KakagouLT/p/4501185.html
Copyright © 2011-2022 走看看