• 具有多值的组合问题


    1.类似如下的题目

    X星球要派出一个5人组成的观察团前往W星。

    其中:
    A国最多可以派出4人。
    B国最多可以派出2人。
    C国最多可以派出2人。
    D国最多可以派出1人。
    E国最多可以派出1人。
    F国最多可以派出3人。
    那么最终派往W星的观察团会有多少种国别的不同组合呢?

    2.通用解法代码

    package test;
    import java.util.*;
    
    public class Main{
        public static char[] cty="ABCDEF".toCharArray();
        public static int[] count= {6,2,2,1,1,3};
        
        public static int f(int k,int goal,String s) {
            int left=0;
            for(int i=k;i<cty.length;i++) left+=count[i];
            if(left<goal) return 0;
            if(goal==0) {
                System.out.println(s);
                return 1;
            }
            int a=0;
            for(int i=0;i<=count[k]&&i<=goal;i++) {
                StringBuilder sb=new StringBuilder(s);
                for(int j=0;j<i;j++) sb.append(cty[k]);
                count[k]-=i;
                a+=f(k+1,goal-i,sb.toString());
                count[k]+=i;
            }
            return a;
        }
        public static void main(String[] args) {
            //A B C D E F: 4 2 2 1 1 3
            System.out.println(f(0,5,""));
            
        }
        public static int f4(int[] a, int k, int n, String s)
        {
            if(k==a.length){ 
                if(n==0) {System.out.println(s); return 1;}
                return 0;
            }
            int total=0;
            String s2 = s;
            for(int i=0; i<=a[k]; i++){
                total+=f4(a,k+1,n-i,s2);
                s2 += (char)(k+'A');
            }
            return total;
        }
    }
  • 相关阅读:
    Centos下安装Redis
    Web框架的本质
    DOM Event
    HTML DOM
    JavaScript运算符
    JavaScript基础
    开发中常用的插件与框架
    selector模块
    IO模型(阻塞、非阻塞、多路复用与异步)
    事件驱动模型
  • 原文地址:https://www.cnblogs.com/lshao/p/8618717.html
Copyright © 2020-2023  润新知