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

浙公网安备 33010602011771号