zoukankan      html  css  js  c++  java
  • 具有多值的组合问题

    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;
        }
    }
  • 相关阅读:
    java序列化进阶
    jQuery学习一(选择器)
    java poi 操作Excel常用方法总结
    mybatis批量foreach的使用
    java中关于try、catch、finally的总结
    MyEclipse使用指南(精简版)
    单例模式
    抽象工厂模式
    java.io.Serializable
    java.lang.string
  • 原文地址:https://www.cnblogs.com/lshao/p/8618717.html
Copyright © 2011-2022 走看看