0-1背包问题与完全背包问题C++实现动态规划

  • 格式:pdf
  • 大小:49.80 KB
  • 文档页数:1

0-1背包问题与完全背包问题C++实现动态规划今天看了看背包九讲,⾃⼰写了下0-1背包和完全背包王晓东《计算机算法分析与设计》上⾯给出的C++实现⽐较繁琐,相⽐⽽⾔这个版本更加简明给出了测试数据0-1背包问题C++实现/*任务:计算0-1背包问题的最⼤价值Sample Input10 42 13 34 57 9Sample Output120 1 0 1*/#include#includeint c[20][1000];//c[k][y]为只允许装前k种物品,背包总重量不超过y的最⼤价值int inumber[21][1000];//inumber[k][u]为只允许装前K种物品,背包总重量不超过y时得到最⼤价值时使⽤的背包的最⼤标号int w[21],p[21];int knapsack(int m,int n){ int i,j; for(i=1;i= w[i]){ if(p[i]+c[i-1][j-w[i]]>=c[i-1][j]){ c[i][j]=p[i]+c[i-1][j-w[i]]; inumber[i][j]=i; } else{ c[i][j]=c[i-1][j]; inumber[i][j]=inumber[i-1][j]; } } else{ c[i][j]=c[i-1][j]; inumber[i][j]=inumber[i-1][j]; } }完全背包问题C++实现/*任务:计算完全背包问题的最⼤价值Sample Input10 42 13 34 51 9Sample Output900 0 0 10*/#include#includeint c[20][1000];//c[k][y]为只允许装前k种物品,背包总重量不超过y的最⼤价值int inumber[21][1000];//inumber[k][u]为只允许装前K种物品,h背包总重量不超过y时得到最⼤价值时使⽤的背包的最⼤标号int w[21],p[21];int knapsack(int m,int n){ int i,j; for(i=1;i= w[i]){ if(p[i]+c[i][j-w[i]]>=c[i-1][j]){//和0-1背包相⽐只是将c[i-1][j-w[i]]写成了c[i][j-w[i]],因为完全背包问题中每件物品有⽆限个 c[i][j]=p[i]+c[i][j-w[i]]; inumber[i][j]=i; } else{ c[i][j]=c[i-1][j]; inumber[i][j]=inumber[i-1][j]; }