经典0-1背包基础注释
来源:互联网 发布:sql server服务器ip 编辑:程序博客网 时间:2024/06/14 09:22
背包问题;
给一个背包的容纳量,给出一堆东西的价值和重量,要求在最大重量的情况下求出最大价值;
将该问题一步步细分,假如背包只有1的容纳量,装这些东西,每个东西都有两种状态,装还是不装,比较在装这个还是不装这的情况下两种价值,找出最大价值;
#include<stdio.h>int main(){int a[5]={2,2,6,5,4}; // a为重量,,,,b为价值int i1,i2,b[5]={6,3,5,4,6},s,k[5][11]={0},t; //多一组0背包 用于装剩余背包与该数的重量相同for(i1=1;i1<=10;i1++){if(i1>=a[4]) //判断最后一排的数如果小于背包就加上该价值{k[4][i1]=b[4];}for(i2=3;i2>=0;i2--) //倒数第二排开始往上以此判断{if((i1-a[i2])>=0) //如果该数小于背包,能装进背包{if((k[i2+1][i1-a[i2]]+b[i2])>=k[i2+1][i1]) //就从背包减去该重量中剩余的背包重量中找最优解;如果最优解加上该数代表的价值大于上一个数;{k[i2][i1]=(k[i2+1][i1-a[i2]]+b[i2]); //该数就是该背包的最优解,保证二维表看k[i][j]中的第一排表示在j的重量下的最大价值;}else //如果小于上一个数{k[i2][i1]=k[i2+1][i1]; //不能加则上一个数仍为最优解}}else //如果该数的重量大于背包;{k[i2][i1]=k[i2+1][i1]; //不能加则上一个数仍为最优解}}}t=k[0][0];for(i1=0;i1<5;i1++){for(i2=0;i2<=10;i2++){printf("%d ",k[i1][i2]);if(k[i1][i2]>=t){t=k[i1][i2];}}printf("\n");}printf("%d",k[0][10]);return 0;}
0 0
- 经典0-1背包基础注释
- 经典0-1背包问题
- 经典0-1背包问题
- 经典0-1背包问题
- 经典的0、1背包
- 经典算法之背包问题(0-1背包)
- 入门经典 DP 0-1背包问题
- 经典算法之0-1背包问题
- 0-1背包(DP经典问题)
- 0-1背包基础问题
- 0 / 1 背包问题--动态规划(附详细注释)
- 0-1背包详细解释加代码注释
- 0-1背包问题----最基础题
- Bone Collector(基础 0-1背包)
- 0-1背包问题经典算法(递归实现)
- 0-1背包问题经典算法(二维数组实现)
- 0-1背包问题经典算法(一维数组实现)
- 动态规划经典问题----0-1背包问题
- LinuxCNC+EtherCAT(1.1)~在debian上进行移植Etherlab的Master
- Hadoop - HDFS
- HINSTANCE HANDLE HWND 的区别及一般方法
- 自己工作中遇到的问题及解决总结
- 《MySQL必知必会学习笔记》:更新和删除数据
- 经典0-1背包基础注释
- Linux下搭建eclipse环境
- SDL画线 16位
- 关于OC中的小数精确计算---NSDecimalNumber
- Ubuntu14.04安装google浏览器
- Android中的Surface和SurfaceView之我见
- CodeForces 366B:Dima and To-do List【水】
- Linux服务器如何查看CPU占用率、内存占用、带宽占用
- Android深入浅出系列之Bluetooth—蓝牙操作(一)