UVA 624 CD (01 背包)
2015-09-08 21:35
309 查看
【题目链接】:click here~~
代码:
代码:
/* * Problem: UVA No.624 * Running time: 0MS * Complier: C++ * Author: javaherongwei * Create Time: 21:25 2015/9/8 星期二 * 【题意】你要录制时间为N的带子,给你一张CD的不同时长的轨道,求总和不大于N的录制顺序 【思路】要求总和最接近N,可以用01背包思想,把不同的轨道当成背包体积,求那么问题可以 转换为求总体积不超过N的最大价值,用二维数组记录选过的数即可 */ #include <iostream> #include <bits/stdc++.h> using namespace std; const int N=10005; int volume ; int dp ; bool vis[25] ; int main() { int n,V; while(scanf("%d%d",&V,&n)!=EOF) { memset(volume,0,sizeof(volume)); //input memset(dp,0,sizeof(dp)); memset(vis,0,sizeof(vis)); // vis true or not for(int i=0; i<n; ++i) { scanf("%d",&volume[i]); } for(int i=0; i<n; ++i) { for(int v=V; v>=volume[i]; --v) { if(dp[v]<=dp[v-volume[i]]+volume[i]) // != { dp[v]=dp[v-volume[i]]+volume[i]; vis[i][v]=1; //vis true } } } for(int i=n-1,j=V; i>=0; i--) { if(vis[i][j]) // if vis true,print the number { printf("%d ",volume[i]); j-=volume[i]; } } printf("sum:%d\n",dp[V]); } return 0; }
相关文章推荐
- 存储器管理
- 文件上传组件 FileUpload 的使用
- JSP九大内置详解
- 常用Keytool 命令
- android广播大全
- 常用Keytool 命令
- Linux dd命令全面解析
- linux运维练习-计划任务(9月5日)
- Android状态栏变色/沉浸式状态栏 4.4及其以上兼容实现
- Codevs 3117 高精度练习之乘法
- 第三章 IP:网际协议
- HDU——1984 Mispelling4
- codeforces 172B B. Pseudorandom Sequence Period(暴力)
- 分布式文件系统MogileFS的使用
- 插入排序java代码
- rsync 的配置
- Big Number(http://acm.hdu.edu.cn/showproblem.php?pid=1018)
- HDU 1172 猜数字 深搜
- [转载]IntelliJ IDEA 14.x 创建工作空间与多个Java Web项目
- swift详解之二十六-----------CALayer 判断是否点击hitTest 和 contensRect