uva 12563劲歌金曲

来源:互联网 发布:java 多重循环 break 编辑:程序博客网 时间:2024/04/29 08:27

动态规划例题


在规定的时间内要唱最多的歌但最后要留出时间唱劲歌金曲,求唱最多的歌的个数以及此时的最长时间

源码

#include<stdio.h>#include<string.h>int max(int x,int y){ if(x>=y) return x; else return y;}int d[55][10000];int len[55][10000];int main(){ int tag,m,n,t,time[55]; scanf("%d",&m); int count=1; while(count<=m){  memset(d,0,sizeof(d));  memset(len,0,sizeof(len));  scanf("%d%d",&n,&t);  for(int i=1;i<=n;i++) scanf("%d",&time[i]);  for(int i=n;i>=1;i--){   for(int j=1;j<=t;j++){    d[i][j]=d[i+1][j];    len[i][j]=len[i+1][j];    if(j>time[i]) {     if(d[i][j]<d[i+1][j-time[i]]+1){      d[i][j]=d[i+1][j-time[i]]+1;      len[i][j]=len[i+1][j-time[i]]+time[i];     }     else if(d[i][j]==d[i+1][j-time[i]]+1) len[i][j]=max(len[i][j],len[i+1][j-time[i]]+time[i]);    }   }  }  printf("Case %d: %d %d\n",count,d[1][t]+1,len[1][t]+678);  count++; } return 0; }


0 0
原创粉丝点击