uva 624 CD
来源:互联网 发布:凯迪网络社区官网 编辑:程序博客网 时间:2024/06/07 02:38
//题目大意:你有一个CD和一个磁带,你想要把CD里面的歌曲拷贝到磁带中。但是磁带容量有限,要求你尽量选择歌曲使得磁带中剩余容量最小。
//思路见下端
#include<iostream>#include<algorithm>#include<cstdio>#include<vector>#include<cstring>#include<string>using namespace std;int dp[21][100000];int max(int x,int y){if(x>y)return x;return y;}struct cds{int num,lon;};cds cd[21];vector<cds> ve;bool cmp(const cds &a,const cds &b){return a.num<b.num;}int main(){ios::sync_with_stdio(false);int n,v,ans,i,j;while(cin>>v>>n){ve.clear();memset(dp,0,sizeof(dp));for(i=1;i<=n;i++){cin>>cd[i].lon;cd[i].num=i;}for(i=1;i<=n;i++)//01背包{for(j=1;j<=v;j++){if(j>=cd[i].lon)dp[i][j]=max(dp[i-1][j],dp[i-1][j-cd[i].lon]+cd[i].lon);elsedp[i][j]=dp[i-1][j];}}ans=dp[n][v];j=v,i=n;while(i>0&&j>0)//打印路径{if(dp[i][j]==dp[i-1][j-cd[i].lon]+cd[i].lon){ve.push_back(cd[i]);j=j-cd[i].lon;}i--;}sort(ve.begin(),ve.end(),cmp);for(i=0;i<ve.size();i++)cout<<ve[i].lon<<" ";cout<<"sum:"<<ans<<endl;}return 0;}<div style="text-align: center;"></div>
//有题目可知,就是简单的01背包+打印路径,不过路径要用编号存储起来,然后排序打印出
0 0
- uva 624 CD
- UVa 624 - CD
- Uva 624 CD
- UVA 624 CD
- UVa 624 - CD
- UVa 624 - CD
- uva 624 CD
- uva 624 CD
- UVa 624 - CD
- UVa 624 CD
- Uva-624-CD
- CD UVA 624
- UVA 624 CD
- UVA 624 - CD
- UVa:624 CD
- UVa 624: CD
- UVA - 624 CD
- uva 624 cd
- Help Me with the Game
- c++程序员经典面试题(2)
- css中vertical-align(垂直对齐)的使用
- Requests: HTTP for Humans
- Address already in use: JVM_Bind
- uva 624 CD
- python socket 模块
- Java程序设计实用教程(第四版,叶贺亚)考试复习题-纯属个人思想
- 取反操作的陷阱及一个电阻的迷惑
- 剑指offer 面试题11
- 黑马程序员——Java基础---String类和基本数据类型包装类
- iOS开发之查找目录
- [总结]视音频编解码技术零基础学习方法
- 3D游戏换装