http://hihocoder.com/contest/offers62/problems
题目2 : 被遗忘的整数
2个数直接相乘就是结果,因为n*sum(1/ai)=sum(ai)
如果把约数都排序的话,n乘以第一小约数的倒数等于最大的约数,n乘以第二小约的倒数数等于倒数第二大的约数,所以数组的逆了个序,sum当然一样
题目3 : 金额组合
根据bit位来求,思路是想到了,但是实现的时候遇到点问题
我是想都转换为二进制来求,其实不必,比如
package l623;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
long c=sc.nextLong();
long[]a=new long[n];
for(int i=0;i<n;i++) a[i]=sc.nextLong();
Arrays.sort(a);
long res=0;
int k=n-1;
while(k>=0) {
while(k>=0 && a[k]>c) k--;
if(k==-1) break;
res += (((long)1)<<k);
c-=a[k];
}
System.out.println(res-1);
}
}
网友评论