J-J (01)背包
2018-04-08 12:50
176 查看
You have a long drive by car ahead. You have a tape recorder, but unfortunately your best music is onCDs. You need to have it on tapes so the problem to solve is: you have a tapeNminutes long. Howto choose tracks from CD to get most out of tape space and have as short unused space as possible.Assumptions:•number of tracks on the CD does not exceed 20•no track is longer thanNminutes•tracks do not repeat•length of each track is expressed as an integer number•Nis also integerProgram should find the set of tracks which fills the tape best and print it in the same sequence asthe tracks are stored on the CDInputAny number of lines. Each one contains valueN, (after space) number of tracks and durations of thetracks. For example from first line in sample data:N=5, number of tracks=3, first track lasts for 1minute, second one 3 minutes, next one 4 minutesOutputSet of tracks (and durations) which are the correct solutions and string ‘sum:’ and sum of durationtimes.
Sample Input5 3 1 3 410 4 9 8 4 220 4 10 5 7 490 8 10 23 1 2 3 4 5 745 8 4 10 44 43 12 9 8 2Sample Output1 4 sum:58 2 sum:1010 5 4 sum:1910 23 1 2 3 4 5 7 sum:554 10 12 9 8 2 sum:45
Sample Input5 3 1 3 410 4 9 8 4 220 4 10 5 7 490 8 10 23 1 2 3 4 5 745 8 4 10 44 43 12 9 8 2Sample Output1 4 sum:58 2 sum:1010 5 4 sum:1910 23 1 2 3 4 5 7 sum:554 10 12 9 8 2 sum:45
#include<stdio.h> #include<string.h> const int maxn=1005; int val[25],dp[maxn]; bool vis[25][maxn]; int main() { int n,m,i,j; while(~scanf("%d%d",&n,&m)) { memset(dp,0,sizeof(dp)); memset(vis,0,sizeof(vis)); for(i=0;i<m;i++) { scanf("%d",&val[i]); } for(i=0;i<m;i++) { for(j=n;j>=val[i];j--) { if(dp[j-val[i]]+val[i]>=dp[j]) { dp[j]=dp[j-val[i]]+val[i]; vis[i][j]=true; } } } j=n; for(i=m-1;i>=0;i--) { if(vis[i][j]) { printf("%d ",val[i]); j=j-val[i]; } } printf("sum:%d\n",dp ); } return 0; }
相关文章推荐
- 百练 4102 宠物小精灵之收服 【二维费用01背包】
- 01背包、完全背包、多重背包问题分析
- HDU 2602 Bone Collector(01背包经典)
- hdu3466Proud Merchants (01背包,以q-p从小到大排序)
- [poj2923]Relocation_状压dp_01背包
- 01背包问题 (好难理解)
- HDU 1203 I NEED A OFFER!(01背包)
- poj 3624 01背包水题
- hdu 2546 饭卡 01背包
- 背包01和完全
- 【POJ1837】Balance,带负体积状态的01背包,水题
- 51nod 1085 01背包
- 一些算法(最短路,线段树,01,完全背包,STL)的基本参考资料
- hdu 2602 Bone Collector 01背包
- uestc oj 1218 Pick The Sticks (01背包变形)
- NYOJ又见01背包
- 01背包问题(动态规划)
- 01背包问题的动态规划解法
- USACO Section 2.2 Subset Sums(整数划分01背包思想)
- hdu5188 加限制的01背包问题