zoukankan      html  css  js  c++  java
  • 动态规划之工作方案

    package test;
    
    import java.util.Scanner;
    
    public class Main0 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
            final int mod = 1000000007;
    		try(Scanner in = new Scanner(System.in)){
    			int s = in.nextInt();
    			int a = in.nextInt();
    			int b = in.nextInt();
    			int c = in.nextInt();
    			int cnt[][][][] = new int[51][51][51][51];
                cnt[0][0][0][0] = 1;
    			for(int i = 1;i <= s; i++) {
    				for(int j = 0;j <= i; j++) {
    					for(int k = 0; k <= i; k++) {
    						for(int l = 0; l <= i; l++) {
    							if(j != 0) cnt[i][j][k][l] = (cnt[i][j][k][l] % mod +  cnt[i-1][j-1][k][l] % mod) % mod;
    							if(k != 0) cnt[i][j][k][l] = (cnt[i][j][k][l] % mod +  cnt[i-1][j][k-1][l] % mod) % mod;
    							if(l != 0) cnt[i][j][k][l] = (cnt[i][j][k][l] % mod +  cnt[i-1][j][k][l-1] % mod) % mod;
    							if(j!=0 && k!=0) cnt[i][j][k][l] = (cnt[i][j][k][l] % mod +  cnt[i-1][j-1][k-1][l] % mod) % mod;
    							if(j!=0 && l!=0) cnt[i][j][k][l] = (cnt[i][j][k][l] % mod + cnt[i-1][j-1][k][l-1] % mod) % mod;
    							if(k!=0 && l!=0) cnt[i][j][k][l] = (cnt[i][j][k][l] % mod +  cnt[i-1][j][k-1][l-1] % mod) % mod;
                                if(j!=0 && k!=0 && l!=0) cnt[i][j][k][l] = (cnt[i][j][k][l] % mod +  cnt[i-1][j-1][k-1][l-1] % mod) % mod;
    						}
    					}
    				}
    			}
    			System.out.println(cnt[s][a][b][c]);
    		}
    	}
    
    }
    

      本题来自牛客网,网易一道算法题。

           参考一位大神的C++算法,改成Java写的。主要思想是动态规划。分析最优子结构可知,当工作量 s+1 时,这个1的工作量必须由后面的3个人做。那么就有2^3 -1 种可能(可以一个人做,可以两个人,可以三个人同时做),所以就有了这么多if语句,当然,不能一个人都不做,所以总共就是2^3 - 1。if判断当中,多个变量时候,任何一个都不能为0,原因是为0相当于没有分给他,这种情况会在之前的if中讨论。最重要的是分析出子结构。然后再dp。

  • 相关阅读:
    java生成二维码
    关于使用QRcode.jar生成二维码
    sun.misc.BASE64Encoder找不到jar包的解决方法
    perl 调用方法 子例程说明
    perl 访问类方法的几种方式
    perl use base 代替 @ISA
    perl 为什么要用引用来做对象呢?
    12.5.3 UNIVERSAL:最终的祖先类:
    Informix9客户端工具Server Studio JE乱码的解决方法
    perl 使用SUPER类来访问覆盖的方法
  • 原文地址:https://www.cnblogs.com/theWinter/p/11248585.html
Copyright © 2011-2022 走看看