背包问题,看不懂,啊!!!!!!!!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!");
}

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

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

原文地址:https://www.cnblogs.com/bersaty/p/2228044.html