当前位置:网站首页>[daily question] Porter (DFS / DP)
[daily question] Porter (DFS / DP)
2022-07-06 09:09:00 【Easenyang】
Title Description
The other day , New students from senior one are coming , He peddles his books as usual , After a lot of talking , The students decided to buy his book , But there are three piles of books on Mr. Chen's desk , Each pile has a thick stack , He should find a way to take down the book in the easiest way and give it to his classmates . But you want to tease teacher Chen , So you design a most tiring way for him . If I tell you that these three piles have i,j,k This book , And the quality of each pile of books from bottom to top , You can only take books from the top of any pile every time , Then please design a plan , Let him try his best to take down all the books .
obviously , Teacher Chen's physical exertion will increase every time he takes the book , Here, the coefficient of physical strength is used to represent , When you take down the first book , Physical strength coefficient is 1, The physical strength coefficient of the second book is 2, By analogy , And the value of each physical exertion is the product of the physical coefficient and the weight of the book .Input format
The first line has three integers , They are the number of three stacks of books i,j,k.
The second row to the fourth row are the weight of each pile of books from bottom to top .
Output format
Output the total physical exertion of the most tiring way .
sample input
3 2 4
2 3 2
1 5
9 8 7 4
sample output
257
Topic link : hamal
Ideas 1:(DFS)
You can search every kind of book retrieval , Record physical exertion in various situations , Taking the maximum
Code :
import java.util.Scanner;
public class Main {
static int i, j, k;
static int[] num1,num2,num3;// An array of three stacks of books
static int res = 0; // final result
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
i = sc.nextInt(); j = sc.nextInt() ; k = sc.nextInt();
num1 = new int[i+1]; num2 = new int[j+1]; num3 = new int[k+1];
for (int a = 1; a <= i; a++) num1[a] = sc.nextInt();
for (int a = 1; a <= j; a++) num2[a] = sc.nextInt();
for (int a = 1; a <= k; a++) num3[a] = sc.nextInt();
dfs(0, 1);
System.out.println(res);
}
/** * @param temp Record the physical exertion of taking books in some way * @param t Current physical strength coefficient */
public static void dfs(int temp, int t) {
if (i + j + k ==0) {
// All for 0 Tense means that you have finished taking , Update results
res = Math.max(res, temp);
return;
}
if (i > 0) {
// There is surplus in this heap , Can continue to get this stack
temp += t * num1[i--]; // Take the situation
dfs(temp, t+1);
temp -= t * num1[++i]; // If you don't take it, go back
}
if (j > 0) {
temp += t * num2[j--];
dfs(temp, t+1);
temp -= t * num2[++j];
}
if (k > 0) {
temp += t * num3[k--];
dfs(temp, t+1);
temp -= t * num3[++k];
}
}
}
Ideas 2:(DP)
use dp[a][b][c] It means that the number of three stacks of books is a,b,c when , The greatest consumption of physical strength , It's for dp[a-1][b][c] + num1[a] * t ,dp[a][b-1][c] + num2[b] * t and dp[a][b][c-1] + num3[c] * t Of which t Is the current physical strength coefficient
Code :
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int i = sc.nextInt(), j = sc.nextInt(), k = sc.nextInt();
int sum = i + j + k; // Total number of books
int[] num1 = new int[i+1], num2 = new int[j+1], num3 = new int[k+1];
for (int l = 1; l <= i; l++) num1[l] = sc.nextInt();// The weight of each book stored in each pile
for (int l = 1; l <= j; l++) num2[l] = sc.nextInt();
for (int l = 1; l <= k; l++) num3[l] = sc.nextInt();
int[][][] dp = new int[i+1][j+1][k+1];
for (int a = 0; a <= i; a++)
for (int b = 0; b <= j; b++)
for (int c = 0; c <= k; c++) {
// The current physical strength coefficient is the total number of books minus a,b,c The value of the add 1
int t = sum - a - b - c + 1;
if (a > 0)
dp[a][b][c] = dp[a-1][b][c] + num1[a] * t;
if (b > 0)
dp[a][b][c] = Math.max(dp[a][b-1][c] + num2[b] * t, dp[a][b][c]);
if (c > 0)
dp[a][b][c] = Math.max(dp[a][b][c-1] + num3[c] * t, dp[a][b][c]);
}
System.out.println(dp[i][j][k]);
}
}
边栏推荐
- LeetCode:162. 寻找峰值
- After reading the programmer's story, I can't help covering my chest...
- In depth analysis and encapsulation call of requests
- Detailed explanation of dynamic planning
- [OC-Foundation框架]--<Copy对象复制>
- ant-design的走马灯(Carousel)组件在TS(typescript)环境中调用prev以及next方法
- LeetCode:394. String decoding
- Pytest's collection use case rules and running specified use cases
- The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
- Different data-driven code executes the same test scenario
猜你喜欢

UML图记忆技巧

Selenium+Pytest自动化测试框架实战

Different data-driven code executes the same test scenario

【shell脚本】——归档文件脚本

【文本生成】论文合集推荐丨 斯坦福研究者引入时间控制方法 长文本生成更流畅

Intel Distiller工具包-量化实现3

Pytest parameterization some tips you don't know / pytest you don't know

Advance Computer Network Review(1)——FatTree

KDD 2022论文合集(持续更新中)

The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
随机推荐
MYSQL卸载方法与安装方法
I-BERT
不同的数据驱动代码执行相同的测试场景
AcWing 2456. 记事本
vb. Net changes with the window, scales the size of the control and maintains its relative position
UML diagram memory skills
LeetCode:498. Diagonal traversal
What is the role of automated testing frameworks? Shanghai professional third-party software testing company Amway
Intel distiller Toolkit - Quantitative implementation 1
CUDA realizes focal_ loss
LeetCode:673. 最长递增子序列的个数
什么是MySQL?MySql的学习之路是怎样的
The carousel component of ant design calls prev and next methods in TS (typescript) environment
postman之参数化详解
LeetCode:124. 二叉树中的最大路径和
数学建模2004B题(输电问题)
KDD 2022 paper collection (under continuous update)
Pytest参数化你不知道的一些使用技巧 /你不知道的pytest
[OC foundation framework] - string and date and time >
Pytest之收集用例规则与运行指定用例