【C系列综合1】游戏达人I

本文描述了ACM团队成员ydw面临的问题,他要在有限时间内选择多个游戏结局以最大化愉悦度。通过动态规划算法,计算不同结局组合下的最优愉悦度。
摘要由CSDN通过智能技术生成

 

Description

 

ACM队的ydw是个游戏的狂热爱好者,他喜好玩各种各样的单机游戏,以可以得到各种不同的结局通关为乐,但是由于时间有限(他还要出题TAT),于是他只能选择自己喜欢的几个结局来通关,由于ydw是游戏达人,因此他可以自己搞定所有的剧情而不去查攻略,但是由于自力更生,完成每个结局的时间是不同的,而他对每一个结局的喜好度也是不同的,即通关每个结局他获得的愉悦度是不同的。他希望在自己有限的时间内可以通关某些结局来使得自己的愉悦度最大。

 

Input

 

有多组测试数据,

第1行为N(0<N<=100)和T(0<T<=2000),表示ydw有N个游戏可以玩,玩游戏的总的时间为T。

接下来3*N行,每行第一个数字n(1<=n<=10)表示这个游戏有几种结局,接下来的一行n个数字表示通关某个结局ydw可以获得的愉悦度,再接下来一行的n个数字表示ydw通关某个结局需要的时间。

测试数据以0 0结尾。(数据保证愉悦度和时间均大于0,小于等于1000)

 

Output

 

ydw可以获得的最大愉悦度。

#include <bits/stdc++.h>
using namespace std;

int dp[1050][1050] = { 0 };

int main() {
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int N, T;
	while (cin >> N >> T) {
		if (N == 0 && T == 0)break;
		int temp1 = 0, count = 0;
		vector<int> happy, time;
		happy.push_back(0); time.push_back(0);
		for (int i = 0; i < N; ++i) {
			int n; cin >> n;
			for (int j = temp1; j < n+temp1; ++j) {
				int temp2; cin >> temp2;
				happy.push_back(temp2);
			}
			for (int j = temp1; j < n+temp1; ++j) {
				int temp2; cin >> temp2;
				time.push_back(temp2);
			}
			temp1 = n;
			count += n;
		}

		for (int i = 1; i <= count; i++) {
			for (int j = 1; j <= T; j++) {
				if (j < time[i])
					dp[i][j] = dp[i - 1][j];
				else
					dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - time[i]] + happy[i]);
			}
		}
		cout << dp[count][T] << '\n';
	}
	return 0;
}

 

 

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值