hdu1709(The Balance)用java会超时

hdu1709

思路:也是由给定的几个数组合成其他数,就想到用母函数,但是这里要多考虑有加有减的情况。

import java.util.*;
class Main{
	public static void main(String args[]){
		final int max=10005;
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext()){
			int n=sc.nextInt();
			int[] quality=new int[110];
			int total=0;
			for(int i=0;i<n;i++){
				quality[i]=sc.nextInt();
				total+=quality[i];
			}
			int[] result=new int[max];
			int[] change=new int[max];
			result[0]=1;
			result[quality[0]]=1;
			for(int i=1;i<n;i++){
				for(int j=0;j<=total;j++){
					for(int k=0;k+j<=total&&k<=quality[i];k+=quality[i]){
						if(k>=j){//考虑组合时的相减情况
							change[k-j]+=result[j];
						}else{
							change[j-k]+=result[j];
						}
						change[j+k]+=result[j];
					}
				}
				for(int j=0;j<=total;j++){
					result[j]=change[j];
					change[j]=0;
				}
			}
			int[] numb=new int[max];
			int k=0;
			for(int i=1;i<=total;i++){
				if(result[i]==0){
					numb[k++]=i;
				}
			}
			System.out.println(k);
			if(k!=0){
				for(int i=0;i<k-1;i++){//控制最后一个空格
					System.out.print(numb[i]+" ");
				}
				System.out.println(numb[k-1]);
			}
		}
	}
}
注:用java直接去交题会超时,因为java里的输入输出都是调用包和类,自然比c话的时间会多!


你可能感兴趣的:(hdu1709(The Balance)用java会超时)