Input 第一行是數據的組數T;每組數據的第一行是2個正整數:假期時間m和可做的工作數n;接下來n行分別有3個正整數描述對應的n個工作的起始時間s,終止時間e,總工資c。
Output 對於每組數據,輸出吉哥可獲得的最高工資數。
Sample Input 1 10 5 1 5 100 3 10 10 5 10 100 1 4 2 6 12 266
Sample Output 102 簡單的DP思路,只要把數據先排個序就OK了0.0
1 #include<iostream>
2 #include<cstdio>
3 #include<algorithm>
4 #include<cstring>
5
6 using namespace std;
7
8 struct nn{
9 int s,e;
10 int p;
11 }dd[1010];
12 int dp[1010];
13 bool cmp(nn n1,nn n2)
14 {
15 if(n1.e!=n2.e)
16 return n1.e<n2.e;
17 else
18 return n1.p>n2.p;
19 }
20
21 int main()
22 {
23 int T;
24 scanf("%d",&T);
25 while(T--)
26 {
27 int m,n;
28 memset(dp,0,sizeof(dp));
29 scanf("%d%d",&m,&n);
30 for(int i=0;i<n;i++)
31 {
32 scanf("%d%d%d",&dd[i].s,&dd[i].e,&dd[i].p);
33 }
34 sort(dd,dd+n,cmp);
35 for(int i=0;i<n;i++)
36 {
37 for(int j=m;j>=dd[i].e;j--)
38 {
39 if(dd[i].e<=m)
40 dp[j]=max(dp[j],dp[dd[i].s-1]+dd[i].p);
41 }
42 }
43 printf("%d\n",dp[m]);
44 }
45 return 0;
46 }