列表

详情


NC21726. 王者荣耀

描述

 "无论何时何地,都会遵守约定"。"奋力逃吧"。"关于取下敌人性命这件事,也从不失约"。

小懒虫zmx平时最喜欢玩的游戏就是《王者荣耀》,在这款游戏中它也最喜欢百里守约这个英雄。最近,zmx准备冲国服百里,所以它开始练英雄,你有很多个时间段来练习英雄,每个时间段有一个开始时间点和结束时间点,以及可以获得的熟练度。不过现在你可以随意修改任意练习时间段的开始和结束时间点,但是你不能修改时间段的长度和获得的熟练度!由于要学习,你只能在固定时间段玩游戏,问你最多可以获得多少熟练度?

例如:你可以把[2,3),修改为[1,2)或者[3,4)等等,他们的长度都是1。

注意:对于某个时间段,不管你有没有修改,必须练完整个时间段长度才能获得熟练度!

输入描述

第一行,三个整数n,S,T(0<n<=1000,0<S<T<1000)代表n个时间段和你能在[S,T)时间段内玩游戏。

接下来n行,每行三个整数a,b(0<a<b<1000),c(0<c<1e7),用空格分开,代表时间段起始时间[a,b)和可以获得的熟练度。

输出描述

输出一行,包括一个整数,表示zmx能获得的最大熟练度。

示例1

输入:

3 1 3
1 3 5
2 4 6
4 7 8

输出:

6

示例2

输入:

5 1 5
1 2 1
2 3 2
1 3 3
3 4 2
3 6 4

输出:

7

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 5ms, 内存消耗: 400K, 提交时间: 2022-03-19 21:00:53

#include<iostream>
using namespace std;

int n,s,t; long long dp[1010];
int main()
{
    cin>>n>>s>>t;
    for(int i=0;i<n;i++)
    {
    	int a,b,c;
    	cin>>a>>b>>c;
    	for(int j=t-s;j>=b-a;j--)
    		dp[j]=max(dp[j],dp[j-(b-a)]+c);
	}
	cout<<dp[t-s]<<endl;
    return 0;
}

C++14(g++5.4) 解法, 执行用时: 11ms, 内存消耗: 624K, 提交时间: 2020-06-06 12:22:27

#include<bits/stdc++.h>
using namespace std;
long long dp[1003];
int main(){
	int n,i,S,T,b,e,w,t;
	cin>>n>>S>>T;
	T=T-S;
	while(n--){
		cin>>b>>e>>w;
		t=e-b;
		for(i=T;i>=t;i--){
			dp[i]=max(dp[i],dp[i-t]+w);
		}
	}
	cout<<dp[T];
	return 0;
}

上一题