zoukankan      html  css  js  c++  java
  • 背包问题,看不懂,啊!!!!!!!!dp

    编辑器加载中...

    #include <iostream>
    using namespace std;
    #define N 7//物品数量
    #define S 20//要求背包重量
    int W[N+1]={0,1,4,3,4,5,2,7};//各物品重量,W[0]不使用。。。
    int knap(int s,int n)//s为剩余重量,n为剩余可先物品数。。
    {
          if(s==0)
              return 1;//return 1 means success..
          if(s<0||(s>0&&n<1))
              return 0;//如果s<0或n<1则不能完成
          if(knap(s-W[n],n-1))//从后往前装,如果装满第n个包,剩余的重量仍然可以在剩余的n-1包中放下,那么就将第n个包装满。
    {
       printf("%4d",W[n]);//打印第n个包的容量,即装进第n个包的重量。
       return 1;
    }
       return knap(s,n-1);//如果装满第n个包后,剩余的重量不能在剩余的n-1包中放下,那么就不用第n个包,考虑能不能用第n-1个包。
    }
    void main()
    {
    if(knap(S,N))printf("\nOK!\n");
    else printf("Failed!");
    }
    

    网上找的,太难看懂了,郁闷啊,递归....

    思维跟不上,唉,数学要学好点,趁现在有时间,学多点东西

  • 相关阅读:
    TreeList Linq
    MasterDetail Linq
    C# 事务处理
    设计模式——代理模式(Proxy Pattern)
    设计模式——装饰模式(Decorator Pattern)
    C# 调用WCF服务
    加密解密
    Effective C#高效编程(02:常量)
    切换城市功能
    DataPager控件使用
  • 原文地址:https://www.cnblogs.com/bersaty/p/2228044.html
Copyright © 2011-2022 走看看