1. a[0-n],b[0-n],两个数组,大小为n,元素0<x<100。可以调换a中任意元素的位置,求MIN=a[0]*b[0]+a[1]*b[1]+...+a[n-1]*b[n-1]。
思路:贪心?最大×最小。
2.a-z,A-z的卡片,共52张,随机抽一个字符串,例如xaXb.
消掉相同的字母,要求字典序最小。例如xaXb,消去小x,转换成aXb,输出a。
若消掉大X,则xab,不是最小序。最终结果若是大写,则转换为小写。
思路:输入时,转换大写为小写字母,打表a[0-25],如果有b,a[1]++;//b对应的位置++
for(n)
如果第一个字符访问两次了,判断它后面的字符是否比他小。//待续
3.劫匪两个,数轴上有n个银行,他们商量分别抢劫距离至少为d的两家银行,问他们最多能抢多少钱。
首先输入 n d,再输入n行 银行的信息:位置 金额。
Input:
6 3
1 1
3 5
4 8
6 4
10 3
11 2
Output:
11
思路:by西蒙
将银行按位置排序,m[i]代表当前银行及以前位置的最大银行的钱数(最有钱的银行,的金额)。
从最后一个银行开始看(此银行最有钱),倒序判断此银行距离d以上的银行,第一个符合条件的银行即最大的两个。
循环n次(从最后一个银行开始,一直找,直到有一个值合法)。
确实好方法啊,O(n)的。西蒙聚聚还是厉害。