0
点赞
收藏
分享

微信扫一扫

算法训练 Sticks

婉殇成长笔记 2022-03-20 阅读 49

算法训练 Sticks


1.题目

  • bug: 运行超时,运算量过大,以后再想办法解决(以更好的运算算法或是更方便的剪枝策略)

问题描述


2.输入格式

输入格式 :

3.输出格式

输出格式 :

4.思路分析

5.代码分析

package Sticks;

import java.util.*;

public class Main {

	static int n,obj,vis[],Sticks[],temp[];
	static long sum;
	static boolean flag;
	public static void main(String[] args){
		Scanner sc =new Scanner(System.in);
		while((n = sc.nextInt())!=0)
		{
			sum = 0; 
			flag = false;
			vis = new int[n];
			Sticks = new int[n];
			temp = new int[n];
			for(int i = 0;i < n;i++)
			{
				Sticks[i] = sc.nextInt();
				sum += Sticks[i];
			}
			Arrays.sort(Sticks);
			for(int i = 0;i < n;i++)
				temp[i] = Sticks[n-1-i];
			Sticks = temp;
			Range();
		}
		sc.close();
	}
	
	static void VF(int i,int num)
	{
		for(int j = 0;j < n;j++)
		{
			if(vis[j] == 0)
			{
				Dfs(j,0,num);
				vis[i] = 0;
				return;
				}
			}	
	}
	static void Range()
	{
		for(int i = Sticks[0];i <= sum;i++)
		{
			if(0 == sum % i)
			{
				obj = i;
				Dfs(0,0,0);
				if(flag)
				{
					System.out.println(obj);	
					break;
				}					
			}
		}
	}
	static void  Dfs(int index,int len,int num)
	{
		for(int i = index;i < n;i++)
		{
		if(flag)
			return;
		if(i != 0)
		{
		if( len != 0  && vis[i-1] == 0 && Sticks[i] == Sticks[i-1]) continue;
		if(len==0&&vis[i-1]==0) continue;			
		}
				if(len + Sticks[i] == obj && vis[i] == 0)
				{
					vis[i] = 1;
					num++;	
					if(num == sum / obj)
					{
						flag = true;
						return;
					}
						VF(i,num);
					}
				if(len + Sticks[i] < obj  && vis[i] == 0)
				{
					vis[i] = 1;
					Dfs(i+1,len + Sticks[i],num);
					if(flag)
						return;
					vis[i] = 0;	
				if(len == 0)
					return;
				}	
		}
	}
}

6.数据参考


1.输入数据

64
34 37 28 16 44 36 37 43 50 22 13 28 41 10 14 27 41 27 23 37 12 19 18 30 33 31 13 24 18 36 30 3 23 9 20 18 44 7 12 43 30 24 22 20 35 38 49 25 16 21 14 27 42 31 7 24 13 21 47 32 6 26 35 28
64
37 6 47 30 14 8 25 46 33 46 15 18 35 15 44 1 38 9 27 29 39 35 4 2 5 50 33 11 27 19 40 13 27 37 45 40 46 21 35 29 18 2 48 3 18 43 3 7 2 31 37 42 16 40 45 20 41 30 32 18 48 22 32 26
64
10 28 18 7 48 4 37 16 7 34 20 25 29 22 33 30 4 20 21 19 9 16 41 50 47 24 19 46 47 2 22 6 30 39 15 29 42 1 44 1 35 15 25 15 38 7 44 42 28 16 10 37 33 2 38 29 26 8 25 22 9 46 30 38
64
36 44 19 29 44 12 29 30 27 5 44 14 14 39 7 41 5 19 29 39 20 18 18 47 25 44 21 34 41 50 23 26 45 41 6 40 5 37 20 33 43 15 48 8 6 5 49 12 23 29 50 44 47 19 41 23 12 11 6 2 12 31 29 6
64
21 37 45 27 23 16 9 17 33 9 25 38 13 25 1 37 3 50 30 1 19 22 24 32 32 31 34 45 11 14 50 32 50 47 10 24 14 19 41 46 27 17 35 41 41 35 27 43 37 8 46 7 30 19 38 13 49 23 10 10 37 11 43 38
64
7 2 14 23 22 6 20 50 22 5 40 12 41 18 6 29 28 1 35 9 21 25 23 20 47 32 31 35 43 23 23 1 26 36 23 50 41 43 49 14 49 41 25 41 10 32 20 37 33 6 45 5 30 20 24 27 1 6 11 43 30 35 44 6
64
22 18 5 14 12 5 27 10 45 3 3 7 35 22 43 19 29 40 23 9 9 49 37 9 4 49 4 34 34 49 41 5 18 47 19 30 1 47 39 48 50 41 4 34 14 48 4 43 37 26 3 47 26 39 8 30 37 11 15 22 11 5 29 28
64
28 35 41 27 25 8 15 19 6 9 13 37 1 47 27 45 17 3 29 30 47 41 48 21 2 31 32 44 8 28 13 37 15 6 13 41 13 30 11 20 40 25 6 42 21 34 38 39 39 17 21 35 7 18 7 11 50 38 6 10 18 19 46 34
64
24 9 24 38 40 34 8 29 8 15 22 30 1 10 19 39 26 39 25 34 8 32 44 9 21 50 18 40 20 14 23 45 24 48 32 13 33 41 43 42 8 16 22 8 25 42 48 2 32 22 38 41 5 31 49 26 32 17 17 3 32 40 47 5
9
15 3 2 11 4 1 8 8 8 
6
6 2 2 4 8 8
5
1 1 1 1 1 
2
1 1
4
2 2 9 9
3
1 2 3
64
40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 
40 40 43 42 42 41 10 4 40 40 40 40 40 40 40 40 40 40 40 40 40 
40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 
40 
7
49 48 47 46 45 44 43
7
3 4 5 5 5 5 13
7
2 7 7 7 7 10 20
6
1 2 3 11 11 20
7
63 2 44 12 60 35 60 
9
5 2 1 5 2 1 5 2 1
4
1 2 3 4
64
32 32 32 32 32 32 32 32 32 32
32 32 32 32 32 32 32 32 32 32
32 32 32 32 32 32 32 32 32 32
32 32 32 32 32 32 32 32 32 32
32 32 32 32 32 32 32 32 32 32
32 32 32 32 32 32 32 32 32 32
33 33 31 31
64
40 40 30 35 35 26 15 40 40 40 40 40 40 40 40 40 40 40 40 40 40 
40 40 43 42 42 41 10 4 40 40 40 40 40 40 40 40 40 40 40 40 40 
40 25 39 46 40 10 4 40 40 37 18 17 16 15 40 40 40 40 40 40 40 
40
0


2.输出数据

421
155
79
89
134
77
197
66
841
20
10
1
1
11
3
1251
322
20
30
24
276
6
5
64
454


举报

相关推荐

0 条评论