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;
        }
    }
  • 相关阅读:
    27、springboot整合RabbitMQ(1)
    26、springboot与消息
    25、springboot与缓存整合Redis
    24、springboot与缓存(2)
    linux之参数实用讲解
    linux之创建临时文件的方法
    【转】linux之shfit
    linux之stat
    Shell 环境中的输入输出重定向
    Linux下samba的安装与配置
  • 原文地址:https://www.cnblogs.com/lshao/p/8618717.html
Copyright © 2011-2022 走看看