UVA12563JinGeJinQu[h]ao

来源:互联网 发布:制作vpn客户端软件 编辑:程序博客网 时间:2024/06/07 19:30
//UVA12563JinGeJinQu#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MAXN = 180 * 50 + 678 + 10;const int INF = 1e9;int v[55], dis[2][MAXN];int main() {//freopen("UVA12563out.txt", "w", stdout);int T;scanf("%d", &T);for(int kase = 1; kase <= T; kase++){int n, t, p = 1;memset(v, 0, sizeof(v));memset(dis, 0, sizeof(dis));scanf("%d%d", &n, &t);int max_sum = 0;for(int i = 1; i <= n; i++) scanf("%d", &v[i]);for(int i = 0; i <= t; i++) dis[0][i] = -1;dis[0][0] = 0;//开头置0,为方便后续处理  for(int i = 1; i <= n; i++) {    for(int j = 0; j < t; j++) {         dis[p][j] = dis[p^1][j];         if(j >= v[i] && dis[p^1][j - v[i]] >= 0) {//不仅要保证可以排序唱歌,还要保证此地方前一个状态有歌曲结尾或是开头              dis[p][j] = max(dis[p^1][j], dis[p^1][j - v[i]] + 1);  } max_sum = max(dis[p][j], max_sum);}p ^= 1;}int i = 0;for(i = t - 1; i >= 0; i--) {if(dis[p^1][i] == max_sum) break;}printf("Case %d: %d %d\n", kase, max_sum + 1, i + 678);}return 0;}/*23 10060 70 803 10030 69 70*/