01背包(二维数组)+方案记录
来源:互联网 发布:js给value赋值 编辑:程序博客网 时间:2024/06/07 10:02
#include<cstdio>#include<iomanip>#include<iostream>#include<cstring>using namespace std;int p[100];int h[100];int f[100][100];int w[100];int c[100][100];int N,V;void cal(){int j=V;for(int i=N; i>=1; i--){//if(c[i][j] == c[i-1][j-w[i]] + p[i]){if(c[i][j] != c[i-1][j]){h[i]=1;//被选择的物体的编号标记为1j-=w[i];//j为除了被选择物体重量外的总重量}}}int main(){freopen("in.txt","r",stdin);int T;scanf("%d",&T);//测试组数while(T--){int i,j;scanf("%d%d",&N,&V);//数量和总重量memset(c,0,sizeof(c));memset(f,0,sizeof(f));for(i=1; i<=N; i++)//价值scanf("%d",&p[i]);for(i=1; i<=N; i++)//重量scanf("%d",&w[i]);for(i=1; i<=N; i++){for(j=0; j<=V; j++){if(w[i]>j){ c[i][j]=c[i-1][j]; continue; }if(c[i-1][j-w[i]] + p[i] > c[i-1][j]){//放c[i][j] = c[i-1][j-w[i]] + p[i];f[i][j]=1;//方法2}else c[i][j] = c[i-1][j];//不放}}for(i=1; i<=N; i++){for(j=1; j<=V; j++){cout<<left<<setw(5)<<c[i][j]<<" ";}cout<<endl;}cout<<endl;cal();//方法1/*j=V;//方法2for(i=N; i>=1; i--){if(f[i][j]){cout<<i<<" ";j-=w[i];}}*/cout<<endl<<endl;;printf("%d\n",c[N][V]);}return 0;}看到别人不是用C写的,改动下。不使用滚动数组基本是这样记录了~有木有其他方法。。。
0 0
- 01背包(二维数组)+方案记录
- 知识点:01背包(多种姿势:二维实现+一维实现+滚动数组实现+背包装满+输出最优方案)
- HDU 2602 Bone Collector(01二维背包&一维背包&滚动数组优化二维背包的原理 )
- HDU 2126(01背包扩展,记录方案数)
- HDU2159FATE(二维数组完全背包)
- 完全背包:二维数组
- 多重背包记录方案
- 背包问题 -- 二维数组写法 及 特殊情况01背包
- 01背包的理解,二维数组化一维数组的理解(附hdu2602 Bone Collector)
- NYOJ 289 苹果(01背包)两种解法,二维数组,一维数组
- 二维数组 记录
- hdu2159 二维数组多重背包
- POJ_1787_多重背包方案记录
- 01背包问题中用二维数组的思考
- 0-1背包问题(二维数组动态规划)
- 二维费用背包问题+空间优化(滚动数组)
- UVa 624 CD(01背包 需要记录最优解的任一方案)
- HDU-2126 Buy the souvenirs (记录最优方案数的01背包问题 入门题)
- 仿开源中国,分享代码时候的多文件上传
- MySQL高可用系列之MHA(一)
- sql学习笔记
- C语言操作Excel表格
- 多字节字符和宽字符
- 01背包(二维数组)+方案记录
- JVM
- rabbitmq学习笔记
- android——获取屏幕分辨率——Activity中/非Activity中
- #!/bin/bash
- c++构造函数中初始化列表的作用和机制
- js 打开一个新页面 window.open()
- HDU 1711 Number Sequence //简单kmp
- linux下5个查找命令find locate whereis which type