国赛训练营第二周第6题

猴儿锅 2022-05-22 22:29:24
package 搜索;

import java.util.Arrays;
import java.util.Scanner;

public class 木棒 {
    static int n,sum,len;
    static int[] w;
    static boolean[] vis;
    public static void main(String[] args) {
        Scanner sc=new Scanner (System.in);
        while ((n=sc.nextInt ())!=0){
            w=new int[n];
            vis=new boolean[n];
            sum=0;len=1;
            for (int i = 0; i < n; i++) {
                w[i]=sc.nextInt ();
                sum+=w[i];
                len=Math.max (len,w[i]);
            }
            Arrays.sort (w);
            reverse (w);
            while (true){
                if (sum%len==0&&dfs(0,0,0)){
                    System.out.println (len);
                    break;
                }
                len++;
            }
        }
    }
    public static boolean dfs(int u,int cur,int start){
        if (u*len==sum){
            return true;
        }
        if (cur==len){
            return dfs (u+1,0,0);
        }
        for (int i=start;i<n;i++){
            if (vis[i]||cur+w[i]>len) continue;
            vis[i]=true;
            if (dfs (u,cur+w[i],i+1))return true;
            vis[i]=false;
            /*if (cur==0){
                return false;
            }*/
            if (cur+w[i]==len)return false;
            int j=i;
            while (j<n&&w[j]==w[i])j++;
            i=j-1;
        }
        return false;
    }
    public static void reverse(int[] a){
        int l=0,r=a.length-1;
        while (l<r){
            int temp=a[r];
            a[r--]=a[l];
            a[l++]=temp;
        }
    }
}

 

...全文
25 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,779

社区成员

发帖
与我相关
我的任务
社区描述
和众多高校算法内卷分子,一起学习和交流算法那。浓郁的算法交流氛围,拒绝躺平,有效内卷。加入我们,私信我拉你入核心内卷群。
算法数据结构leetcode 个人社区
社区管理员
  • 执 梗
  • Dream-Y.ocean
  • ღCauchyོꦿ࿐
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

 刷题!

试试用AI创作助手写篇文章吧