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 }