描述 | |
你需要从你的棋牌协会中选出30人参加一场团队邀请赛,比赛共30场,15人先手持红,另15人后手持黑.每个人先手和后手的能力值有所不同,现在你需要从你的协会里选出这30人,使得其中15人持红的能力值与另外15人持黑的能力值的总和尽可能大. | |
关于输入 | |
n行(30<=n<=1000),每行两个正整数,分别表示一个人执红和执黑的能力值. | |
关于输出 | |
输出一个正整数,表示按最优方案选取时的能力值总和. | |
例子输入 | |
87 84
66 78
86 94
93 87
72 100
78 63
60 91
77 64
77 91
87 73
69 62
80 68
81 83
74 63
86 68
53 80
59 73
68 70
57 94
93 62
74 80
70 72
88 85
75 99
71 66
77 64
81 92
74 57
71 63
82 97
76 56 思路:本题主要采用动归的思想,开一个三维数组,表示到第n个人有j个执红k个执黑情况下最大的能力值,递归表达式是 a[n+1][j][k] = max{a[n][j][k], a[n][j-1][k]+Contest[n+1][0], a[n][j][k-1]+Contest[n+1][1]}。 实现代码如下: |