标签:style blog http io ar color os sp for
| CD |
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:
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
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
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 dp[10000],time[10000],sum,cd[25];
int N,m,t;
while(scanf("%d%d",&N,&m)>0)
{
memset(dp,0,sizeof(dp));
dp[0]=1;
while(m--)
{
scanf("%d",&t);
for(int v = N; v>=t; v--)
if(dp[v-t]&&dp[v]==0)
dp[v]=dp[v-t]+1,time[v]=t;
}
for(sum=N;sum>0;sum--)
if(dp[sum])
break;
int i=0;
for(int j=sum;j>0;j=j-time[j])
cd[++i]=time[j];
for( ;i>0;i--)
printf("%d ",cd[i]);
printf("sum:%d\n",sum);
}
}
标签:style blog http io ar color os sp for
原文地址:http://blog.csdn.net/u010372095/article/details/41653125