UVA 624(记录路径)
2016-05-22 17:01
363 查看
/*You have a long drive by car ahead. You have a tape recorder, but unfortunately your best music is on CDs. You need to have it on tapes so the problem to solve is: you have a tape N minutes long. How to 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 than N minutes ? tracks do not repeat ? length of each track is expressed as an integer number ? N is also integer Program should find the set of tracks which fills the tape best and print it in the same sequence as the tracks are stored on the CD Input Any number of lines. Each one contains value N, (after space) number of tracks and durations of the tracks. For example from first line in sample data: N = 5, number of tracks=3, first track lasts for 1 minute, second one 3 minutes, next one 4 minutes Output Set of tracks (and durations) which are the correct solutions and string ‘sum:’ and sum of duration times. Sample Input 5 3 1 3 4 10 4 9 8 4 2 20 4 10 5 7 4 90 8 10 23 1 2 3 4 5 7 45 8 4 10 44 43 12 9 8 2 Sample Output 1 4 sum:5 8 2 sum:10 10 5 4 sum:19 10 23 1 2 3 4 5 7 sum:55 4 10 12 9 8 2 sum:45*/ #include <stdio.h> #include <string.h> int main() { int n,t,i,j; int stack[105],top; int dp[105],time[105],flag[105][105]; while(scanf("%d%d",&n,&t)!=EOF) { memset(dp,0,sizeof(dp)); memset(flag,0,sizeof(flag)); for(i=0;i<t;i++) scanf("%d",&time[i]); for(i=0;i<t;i++) { for(j=n;j>=time[i];j--) { if(dp[j]<=dp[j-time[i]]+time[i]) { flag[i][j]=1; dp[j]=dp[j-time[i]]+time[i]; } } } i=t-1; j=dp ; top=0; while(i>=0) { if(flag[i][j]) { stack[top++]=i; j-=time[i]; } i--; } while(top>0) { printf("%d ",time[stack[--top]]); } /* for(i=0;i<t,j>0;i++) { if(flag[i][j]==1) { printf("%d ",time[i]); j-=time[i]; } }*/ printf("sum:%d\n",dp ); } return 0; }
相关文章推荐
- matlab读取写入txt,excel文件
- Wiggle Sort
- Android 切换软键盘 以及关闭
- canvas学习之fillStyle
- 欢迎使用CSDN-markdown编辑器
- 图形化桌面上的脚本编程
- Java动态代理
- HDU 2546 饭卡
- 小组项目第二周总结
- Feather包实现数据框快速读写,你值得拥有
- C语言
- 将博客搬至CSDN
- git 修改commit日期为之前的日期
- android源码解析(二十六)-->截屏事件流程
- 第4课版本定制:Spark Streaming事务处理彻底掌握
- php 简单冒泡排序和选择排序
- 解决eclipse中查看android工程代码出现android.jar has no source attachment
- Android Fragment 真正的完全解析(下)
- iOS开发经验1.1
- Dynamics CRM2016 Web Api之更新时间字段值