# 2542. Maximum Subsequence Score
###### tags: `Leetcode` `Medium` `Priority Queue` `Greedy`
Link: https://leetcode.com/problems/maximum-subsequence-score/description/
## 思路
和[1383. Maximum Performance of a Team](https://hackmd.io/bKCHp-8yTLi42s5emUM0WQ)一样
找到用每个nums2里面的值当最小值的时候 score的最大值 (nums1对应元素的和用priority queue实现)
然后取他们中最大的一个即可
## Code
```python=
class Solution:
def maxScore(self, nums1: List[int], nums2: List[int], k: int) -> int:
currSum = ans = 0
pq = []
for a, b in sorted(list(zip(nums1, nums2)), key = lambda ab: -ab[1]):
heappush(pq, a)
currSum += a
if len(pq)>k: currSum -= heappop(pq)
if len(pq)==k: ans = max(ans, currSum*b)
return ans
```
```java=
class Solution {
public long maxScore(int[] nums1, int[] nums2, int k) {
int n = nums1.length;
int[][] arr = new int[n][2];
for(int i=0; i<n; i++){
arr[i][0] = nums1[i];
arr[i][1] = nums2[i];
}
Arrays.sort(arr, (a,b)->(b[1]-a[1]));
Queue<Integer> pq = new PriorityQueue<>();
long currSum = 0, ans = 0;
for(int i=0; i<n; i++){
currSum += arr[i][0];
pq.add(arr[i][0]);
if(pq.size()>k) currSum -= pq.poll();
if(pq.size()==k) ans = Math.max(ans, currSum*arr[i][1]);
}
return ans;
}
}
```