Problem Jjin Ge Jin Qu [H]ao

(If you smiled to see the title, this problem are for you ^_^)

For those who don ' t know KTV, See:http://en.wikipedia.org/wiki/karaoke_box

There is one very popular song called Jin Ge Jin Qu (Jin song). It is a mix of PNS songs, and is extremely long (minutes and seconds) [1].

Why is it popular? Suppose you has only seconds left (until your time are up) and then you should select another song as soon as possible, be Cause the KTV would not crudely stop a song before it ends (people would get frustrated if it does so!). If you select a 2-minute song, you actually get extra seconds! .... And if you select Jin Ge jin Qu, you ' ll get 663 extra seconds!!!

Now so you still has some time, but you're ' d like to make a plan now. You should stick to the following rules:

- Don ' t sing a song more than once (including Jin Ge Jin Qu).
- For each song of the length T, either sing it for exactly t seconds, or don ' t sing it at all.
- When a song was finished, always immediately start a new song.

Your goal is simple:sing as many songs as possible, and leave KTV as late as possible (since we had rule 3, this also MA Ximizes the total lengths of any songs we sing) when there is ties.

Input

The first line contains the number of test Cases *T*(*T*<=100). Each test case begins with the positive integers *n*,*t*(1<=*n*<=50, 1<=*t*<= 109), the number of candidate songs (besides Jin Ge Jin Qu) and the time left (in seconds). The next line contains *n* positive integers, the lengths of each song, in seconds. Each length would be less than 3 minutes[2]. It is guaranteed, the sum of lengths of all songs (including Jin Ge Jin Qu) would be strictly larger than *T*.

Output

For each test case, print the maximum number of songs (including Jin Ge Jin Qu), and the total lengths of songs, which you ' L L sing.

Sample Input

23 10060 70 803 10030 69 70

Output for the Sample Input

Case 1:2 758Case 2:3 777

Test instructions

1, the more songs in time t sing the better;

2, also requires the total time to sing the longer the better;

At least one second to sing Jin Ge Jin qu, because must choose to sing Jin ge Jin qu to the best;

So use t-1 time to choose to sing the n song;

As much as possible to sing, in the same amount of time as long as possible;

Idea: Take the time as the cost, quantity as value, Carry on 01 knapsack, because the reason of the recursion causes can not confirm the quantity maximum, the time is how much, so to initialize the DP to judge by a special value, namely the complete backpack;

In this way, the time of the greatest number of times is guaranteed to be the total time spent;

Links: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=34887

`#include<iostream>`

`#include<cstdio>`

`#include<cstring>`

`#include<algorithm>`

`#include<iomanip>`

`#include<string>`

`#include<cmath>`

`#include<vector>`

`#include<queue>`

`using namespace std;`

`int dp[10000];`

`const int inf = 0x3f3f3f3f;`

`int next[55];`

`int a[55], t, n;`

`int main()`

`{`

` `

`int T, cas=1;`

` `

`cin>>T;`

` `

`while`

`(T--)`

` `

`{`

` `

`scanf(`

`"%d%d"`

`,&n,&t);`

` `

`for`

`(int i = 1; i <= n; i++){`

` `

`scanf(`

`"%d"`

`,&a[i]);`

` `

`}`

` `

`for`

`(int i = 1; i < 10000; i++) dp[i] = -inf;`

` `

`dp[0] = 0;`

` `

`for`

`(int i = 1; i <= n; i++){`

` `

`for`

`(int j = t-1; j >= a[i]; j--){`

` `

`dp[j] = max(dp[j],dp[j-a[i]]+1);`

` `

`}`

` `

`}`

` `

`int time ,cnt, mas = -inf, pos;`

` `

`for`

`(int i = t-1; i >= 0; i--){`

` `

`if`

`(dp[i]>mas){`

` `

`mas = dp[i]; pos = i;`

` `

`}`

` `

`}`

` `

`printf(`

`"Case %d: %d %d\n"`

`,cas++,mas+1,pos+678);//最后一秒用来唱jin ge jin qu；`

` `

`}`

` `

`return`

`0;`

`}`

UVa 12563 Jin Song Rujia second edition example 9-5;