dfs背包贪心

源程序:背包问题

#include

#include

#include

#include

using namespace std;

const int maxn=22;

int n,v;

int w[maxn];

int c[maxn];

int maxc = 0;

void dfs(int index, int ssum,int cv)

{

    

    

if(index==n)return;//0-n-1

    dfs(index+1,ssum,cv);

    if(ssum+w[index]<=v)

    {

     if(cv+c[index]>maxc)

     {

      maxc = cv+c[index];

     }

dfs(index+1,ssum+w[index],cv+c[index]);

    }

}

int main()

{

    memset(w,0,sizeof(w));

     //fill(c.begin(),c.end(),0);

    memset(c,0,sizeof(c));

    scanf("%d%d", &n,&v);

    for(int i=0;i

    {

     scanf("%d", &w[i]);

     

    }

    

    for(int i=0;i

    {

        scanf("%d", &c[i]);

    }

    dfs(0,0,0);第一件物品

  cout<

}

第一次错:

vectorc;

然后在主函数里

for(int i=0;i

{

 scanf("%d", &w[i]);

scanf("%d",&c[i]);

连一块输出溢出

}

第二次:

int c[maxn]

才能对应于scanf("%d",&c[i])的输入,不然溢出

第三次:

关于memset(a,0,sizeof(a)); 对应于int a[maxn]

关于 fill(a.begin(),a.end(),0) 对应于vectora;

你可能感兴趣的:(算法,c++)