一、Problem
輸入
輸入一行包含一個整數 n。
接下來N行,每行包含一個單詞 Ai。
輸出
輸出最大價值之和。
數據範圍
對於20%的評測用例,1 ≤ n ≤ 10, 且首字母均相同。
對於另外30%的評測用例,1 ≤ n ≤ 10,單詞長度均相同。
對於80%的評測用例,1 ≤ n ≤ 1000。
對於100%的評測用例,1 ≤ n ≤ 100000,單詞長度不超過20個字符且均爲小寫字母。
5
jmcoding
lq
hello
sto
orz
867
二、Solution
方法一:貪心
- 字符串的長度和首字母是固定的。
- 所以只需要預處理一下字符串的 len * C 到數組 val 中,然後升序排列數組 val,因爲可以使得 len * C 儘量最大…
import java.util.*;
import java.math.*;
import java.io.*;
public class Main{
static class Solution {
String[] ss;
long[] work(int N) {
long[] val = new long[N];
for (int i = 0; i < N; i++) {
val[i] = ss[i].length() * (ss[i].charAt(0)-'a'+1);
}
return val;
}
void init() {
Scanner sc = new Scanner(new BufferedInputStream(System.in));
int N = sc.nextInt();
ss = new String[N];
for (int i = 0; i < N; i++) {
ss[i] = sc.next();
}
long[] val = work(N);
Arrays.sort(val);
long sum = 0;
for (int i = 0; i < N; i++) {
sum += (i+1)*val[i];
}
System.out.println(sum);
}
}
public static void main(String[] args) throws IOException {
Solution s = new Solution();
s.init();
}
}
複雜度分析
- 時間複雜度:,
- 空間複雜度:,