刚学了区间dp,找了一道阉割版的任务分配练一下手
因为题目数据较弱所以我打算直接用三层循环寻找区间内符合条件的最优解
代码如下:
#include <bits/stdc++.h>
#define inf 0x7fffffff
#define ll long long
using namespace std;
int dp[1003][1003];
int main()
{
int n,i,j,k;
scanf ("%d",&n);
int Min=inf,Max=0;//找出搜索区间的最大值和最小值
for (i=1;i<=n;i++){
int a,b,c;
scanf ("%d %d %d",&a,&b,&c);
//dp[a][b]表示区间[a,b]
//因为一个区间可能会重复输入,这里取最大值来保证最优解
dp[a][b]=max(dp[a][b],c);
Min=min(Min,a);
Max=max(Max,b);
}
int l=Min,r=Max;//l和r跟上面的Min,Max重复了
int ans=0;
for (i=l;i<=r;i++){
for (j=i;j<=r;j++){
for (k=i;k<=j;k++){
//区间[i,j]可以是区间[i,k]和[k,j]的最大值之和
//三层循环更新最大值
dp[i][j]=max(dp[i][j],dp[i][k]+dp[k][j]);
}
//记录答案
ans=max(dp[i][j],ans);
}
}
printf ("%d",ans);
system("pause");
return 0;
}
这是评测结果