절강대학 2008 년 대학원 재시험 기 시험 5 번
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1918 Accepted Submission(s): 707
Problem Description
매년 졸업 하 는 계절 에 많은 졸업생 들 이 미 친 듯 이 기뻐한다. 친 한 친구 들 이 단체 식 사 를 약속 하 는데 인터넷 에 서 는 'bg' 라 고 부른다.서로 다른 단체 에 참가 하 는 bg 는 서로 다른 느낌 을 가 질 수 있 습 니 다. 우 리 는 하나의 비 마이너스 정수 로 모든 bg 에 '즐거움 도' 를 정의 할 수 있 습 니 다.현재 bg 목록 을 지정 합 니 다. 위 에 모든 bg 의 즐거움, 지속 길이, bg 발기인 의 출 교 시간 을 보 여 줍 니 다. 일련의 bg 시간 을 배정 하여 자신 이 가장 큰 즐거움 을 얻 을 수 있 도록 하 십시오.
예 를 들 어 bg 가 4 번 있 습 니 다.
1 차 즐거움 은 5 로 1 시간 지속 되 며 발기인 은 1 시간 후에 떠 나 야 한다.
2 차 즐거움 은 10 으로 2 시간 지속 되 며 발기인 은 3 시간 후에 떠 나 야 한다.
3 차 즐거움 은 6 으로 1 시간 지속 되 며 발기인 은 2 시간 후에 떠 나 야 한다.
4 차 즐거움 은 3 으로 1 시간 지속 되 며 발기인 은 1 시간 후에 떠 나 야 한다.
가장 큰 즐거움 을 얻 는 안 배 는 3 차 전 을 먼저 시작 하고 즐거움 을 얻 는 것 이다. 6. 1 시간 에 끝나 면 발기인 도 떠 날 수 있다.2 차 전 을 시작 해 즐거움 10 을 얻 고 3 시간 만 에 발기인 이 떠 날 수 있 었 다.발기인 들 이 학 교 를 떠 났 기 때문에 다른 bg 를 더 이상 배정 할 수 없습니다.그래서 얻 은 최대 즐거움 은 16 이다.
bg 는 발기인 이 떠 나 기 전에 끝내 야 합 니 다. 중간 에 bg 를 떠 나 서 는 안 되 고 중간 에 bg 를 가입 해 서 는 안 됩 니 다.
또 당신 의 인 맥 이 너무 좋아 서 30 개 단체 bg 에 이 를 수 있 으 므 로 이 시간 안배 문 제 를 해결 하기 위해 프로그램 을 써 야 합 니 다.
Input
테스트 입력 은 약간의 테스트 용례 를 포함한다.각 테스트 용례 의 첫 번 째 줄 은 하나의 정수 N (< = 30) 을 포함 하고 그 다음 에 N 줄 이 있 으 며 줄 마다 bg 의 정 보 를 제공 합 니 다.
h l t
그 중에서 h 는 즐거움 도 이 고 l 은 지속 시간 (시간) 이 며 t 는 발기인 이 학 교 를 떠 나 는 시간 이다.데이터 보증 l 은 t 보다 크 지 않 습 니 다. 발기인 이 t 시간 후에 떠 나 야 한다 면 bg 는 주인 이 떠 나 기 전에 끝내 야 합 니 다.
N 이 마이너스 일 때 입력 이 끝 납 니 다.
Output
모든 테스트 용례 의 출력 은 한 줄 을 차지 하고 출력의 최대 즐거움 을 차지한다.
Sample Input
3
6 3 3
3 2 2
4 1 3
4
5 1 1
10 2 3
6 1 2
3 1 1
-1
Sample Output
7
16
:
, ,
, ,
,
#include
using namespace std;
typedef struct{
int hd;//
int lst;//
int lvt;//
}bg;
const int NMAX = 31;
bg B[NMAX];
int N;
int m[NMAX][1000];
//
int cmp(const void*A,const void*B)
{
return ((bg*)A)->lvt - ((bg*)B)->lvt;
}
int dp()
{
qsort(B,N,sizeof(bg),cmp);
int mlvt = B[N-1].lvt;// ,
int i,j;
memset(m,0,sizeof(m));
for(i = 1;i <= N;i++)
for(j = 0;j <= mlvt;j++){
if(j <= B[i-1].lvt && j >= B[i-1].lst){
m[i][j] = m[i-1][j-B[i-1].lst]+B[i-1].hd;
if(m[i][j] < m[i-1][j])m[i][j] = m[i-1][j];
}
else m[i][j] = m[i-1][j];
}
int ans = m[N][mlvt];
for(i = 1;i <= mlvt;i++)
if(m[N][i] > ans) ans = m[N][i];
return ans;
}
int main()
{
while(cin>>N&&N>=0){
for(int i = 0; i < N;i++)
cin>>B[i].hd>>B[i].lst>>B[i].lvt;
cout<
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.