uva624 CD 01背包+输出路径
来源:互联网 发布:java 统一异常处理 编辑:程序博客网 时间:2024/06/08 00:45
题意:将CD中的歌曲复制到胶卷中,胶卷最多容纳N分钟,给出CD中歌曲的数量和每一首歌的持续时间
体积和价值贡献一样大的01背包
路径输出:在选择第I件物品是从前I-1个物品这个子问题推出来的,如果f[I][j]>f[I-1][j]说明是选择了第I件物品,用一个数字path[I]记录
#include<iostream>#include<string.h>using namespace std;int f[21][2100];int n,v;int path[21];int c[21];void pack(){memset(path,0,sizeof(path));memset(f,0,sizeof(f));for(int i=1;i<=n;i++)cin>>c[i];for(int i=1;i<=n;i++){for(int j=1;j<=v;j++){if(j<c[i])f[i][j]=f[i-1][j];else{int v1 = f[i-1][j-c[i]]+c[i];int v2 = f[i-1][j];if(v1>=v2){f[i][j] = v1;}else f[i][j] = v2;}}}int j=v;for(int i=n;i>0;i--){if(f[i][j]>f[i-1][j])//在顺推时 考察第i是放还是不放是从前一个状态推出来的,如果放入i时大,说明放入了i,否则没放和前一个状态一样{path[i]=1;j = j - c[i];//减去放入i的体积,回到没放i的状态,继续倒推}}for(int i=0;i<=n;i++)if(path[i]==1)cout<<c[i]<<" ";cout<<"sum:"<<f[n][v]<<endl;}int main(){while(cin>>v>>n){pack();}}
0 0
- uva624 CD 01背包+输出路径
- uva624 CD (01背包+路径的输出)
- uva624 CD 01背包 打印路径
- uva624 - CD(01背包+打印路径)
- uva624 - CD(动规,01背包问题)
- uva624-CD(背包)
- Uva624(记录路径的01背包)
- uva624(01背包+打印路径)
- UVA624(01背包 + 路径打印)
- UVa 624 CD (01背包路径输出)
- UVA 264 CD (01背包+输出路径)
- Uva624 CD (记录路径)
- UVA 题目624 CD(01背包输出路径啊)
- UVA624:CD
- 01背包问题【简单背包,UVA624】
- 01背包路径输出
- uva 624 CD (01背包+打印路径)
- UVA 624 - CD (01背包打印路径)
- 字符串转换成整数
- awk merge lines
- ssh远程重装Centos系统
- jsp基础
- zeromq分析-1-yqueue实现
- uva624 CD 01背包+输出路径
- 华为笔试题,关于操控字符串
- css绝对定位实现居中
- C语言问答3
- C/C++ launch a subprocess and get its output
- python 将数据库导入mysql
- React调试方法
- 数据结构的三个方面
- GIT工作协同