USACO 4.2 Job Processing(贪心)

这个题 第一问应该可以想出,第二问以前也做过类似的贪心,两问组合起来,就是理解不来题意,不知如何下手了,看题解后,唉。。。

第一问有点DP思想,第二问求max(cosa[i] + cosb[n-i+1])。 

 1 /*

 2  ID: cuizhe

 3  LANG: C++

 4  TASK: job

 5 */

 6 #include <cstdio>

 7 #include <cstring>

 8 #include <cmath>

 9 #include <string>

10 using namespace std;

11 #define INF 0x7fffffff

12 int dpa[101],dpb[101],cosa[1001],cosb[1001];

13 int a[101],b[101];

14 int main()

15 {

16     int n,m1,m2,i,j,minz,key,maxz;

17     freopen("job.in","r",stdin);

18     freopen("job.out","w",stdout);

19     scanf("%d%d%d",&n,&m1,&m2);

20     for(i = 1;i <= m1;i ++)

21     scanf("%d",&a[i]);

22     for(i = 1;i <= m2;i ++)

23     scanf("%d",&b[i]);

24     for(i = 1;i <= n;i ++)

25     {

26         minz = INF;

27         for(j = 1;j <= m1;j ++)

28         {

29             if(minz > dpa[j] + a[j])

30             {

31                 minz = dpa[j] + a[j];

32                 key = j;

33             }

34         }

35         dpa[key] = minz;

36         cosa[i] = minz;

37         minz = INF;

38         for(j = 1;j <= m2;j ++)

39         {

40             if(minz > dpb[j] + b[j])

41             {

42                 minz = dpb[j] + b[j];

43                 key = j;

44             }

45         }

46         dpb[key] = minz;

47         cosb[i] = minz;

48     }

49     maxz = -INF;

50     for(i = 1;i <= n;i ++)

51     {

52         if(maxz < cosa[i] + cosb[n-i+1])

53         maxz = cosa[i] + cosb[n-i+1];

54     }

55     printf("%d %d\n",cosa[n],maxz);

56     return 0;

57 }

 

你可能感兴趣的:(process)