背包问题,看不懂,啊!!!!!!!!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!"); }
网上找的,太难看懂了,郁闷啊,递归....
思维跟不上,唉,数学要学好点,趁现在有时间,学多点东西