任务是通过选择输入的订单来计算 48 小时时间段内可能的最大成本。以不重叠的方式选择订单。
例如,如果输入如下
4
1 2 100
2 3 200
3 4 1600
1 3 2100
然后通过选择 last 2 events 输出将是 3700。
请注意,在重叠事件的情况下,仅应选择会产生最大成本的事件。
输入
输入的第一行包含一个整数 T,即测试用例的数量。T 测试用例如下。测试用例的第一行包含一个整数 N,即接收到的用于执行事件的订单数。接下来的 N 行中的每一行都包含三个空格分隔的整数 Si、Ei、Ci,它们是问题陈述中描述的第 i 个事件的参数。约束
1≤T≤10
1≤N≤2000
0 ≤ Si < Ei ≤ 48
0 ≤ Ci ≤ 10^6
输出
每个测试用例的输出应在单独的行中包含一个整数,这是可能的最大成本。
这是一个标准的DP问题这是我的代码。我已经测试了我能想到的所有可能的测试用例,但是当我将此代码提交给在线法官时,我得到了错误的答案。请帮忙。
#include<iostream>
#include<stdio.h>
using namespace std;
unsigned long long A[50][50];
int main()
{
int t,m,S,E,C,i,j;
unsigned long long cost;
scanf("%d",&t);
while(t--)
{
int n=-1;
scanf("%d",&m);
for(i=0;i<50;++i)
for(j=i;j<50;++j)
A[i][j]=0;
while(m--)
{
scanf("%d%d%d",&S,&E,&C);
A[S][E]=C;
if(E>n)
n=E;
}
for(int l=2;l<=(n+1);++l)
{
for(i=0;i<=(n-l+1);++i)
{
j=i+l-1;
for(int k=i;k<=j;++k)
{
cost=A[i][k]+A[k][j];
if(cost>A[i][j])
{
A[i][j]=cost;
}
}
}
}
cout<<A[0][n]<<endl;
}
}