博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态规划之工作方案
阅读量:5131 次
发布时间:2019-06-13

本文共 1605 字,大约阅读时间需要 5 分钟。

 

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。

转载于:https://www.cnblogs.com/theWinter/p/11248585.html

你可能感兴趣的文章
StringBuilder使用方法
查看>>
Linux Namespace
查看>>
程序员编程10大原则,请牢牢记住
查看>>
堆(Heap)详解——Java实现
查看>>
[原创]IBM AppScan工具培训
查看>>
时间格式转换 json 转 datetime js c#
查看>>
jackson 实体转json 为NULL或者为空不参加序列化
查看>>
range
查看>>
nth-child的用法
查看>>
python3 第三十二章 - 标准库概览
查看>>
在xib里,拖一个UIView到UITableView中作为tableHeaderView
查看>>
隐藏php,apache版本号
查看>>
hbase优化小结
查看>>
linux 远程批量分发脚本
查看>>
维护建议--文件和文件组
查看>>
nginx配置正向代理支持HTTPS
查看>>
The order of a Tree
查看>>
FTP文件传输服务器原理
查看>>
深入理解Java:注解(Annotation)基本概念
查看>>
NAT基本原理
查看>>