4.9 小红书笔试第二题

(修改了一下,感谢大佬发现的问题)事后想起来的,大佬看一下这样写可以嘛,现在就知道一个用例

import java.util.*;
public class Main {  
  public static void main(String[] args) {    
	Scanner sc = new Scanner(System.in);     
	int n;      
	int x;      
	int c;      
	n = sc.nextInt();    
	x = sc.nextInt();      
	c = sc.nextInt();       
	int[] m = new int[n];        
	int[] v = new int[n];     
	int[] dp = new int[c+1];    
	for (int i = 0; i < n; i++) {  
	  m[i] = sc.nextInt();  
	}    
	for (int i = 0; i < n; i++) { 
	  v[i] = sc.nextInt();     
	  dp[m[i]] = v[i];     
	}       
	for(int i = 1; i <= c; i++) {  
	  for(int j = 1; j<= i/2; j++) {    
		if(dp[i-j] != 0 && dp[j] != 0)    
		  dp[i] = Math.max((dp[i-j] + dp[j]),dp[i]);    
		if(i%2 == 0 && j == i/2 && dp[i/2]!= 0) {     
		  dp[i] = Math.max(dp[i],2*dp[i/2]+x);   
		}       
	  }          
	  System.out.println(i+" "+dp[i]);  
	}    
	System.out.println(dp[c]);  
  }
}

/*

配制溶液

时间限制: 3000MS

内存限制: 589824KB

题目描述:

实验室需要配制一种溶液。现在,研究员面前有n种该物质的溶液,每一种有无限多瓶,第i种的溶液体积为xi,里面含有yi单位的该物质。研究员每次可以选择一瓶溶液,将其倒入另外一瓶(假设瓶子的容量无限),即可以看作将两个瓶子内的溶液合并。此时合并的溶液体积和物质含量都等于之前两个瓶子内的之和。

特别地,如果瓶子A与B的溶液体积相同,那么A与B合并之后该物质的含量会产生化学反应,使得该物质含量增加X单位。

研究员的任务是配制溶液体积恰好等于C的,且尽量浓的溶液(即物质含量尽量多)。研究员想要知道物质含量最多是多少。

输入描述

第一行三个正整数n,X,C;

第二行n个正整数x1,x2,...,xn,中间用空格隔开;

第三行n个正整数y1,y2,...,yn,中间用空格隔开。

对于所有数据,1≤n,X,C,yi≤1000,1≤xi≤C

数据保证至少存在一种方案能够配制溶液体积恰好等于C的溶液。

输出描述

输出一行一个整数,表示答案。

样例输入

3 4 16

5 3 4

2 4 1

样例输出

29

全部评论
不行吧,dp要n方遍历,内循环不能只遍历m,因为可能药水混合后再跟其他混合的药水混合。
1 回复 分享
发布于 2023-04-10 12:22 上海
大佬有没有笔经啊?
点赞 回复 分享
发布于 2023-04-13 00:00 山西

相关推荐

11-07 13:31
怀化学院 Java
勇敢牛牛不怕难:又疯一个
点赞 评论 收藏
分享
10-09 09:39
门头沟学院 C++
HHHHaos:这也太虚了,工资就一半是真的
点赞 评论 收藏
分享
评论
点赞
2
分享
牛客网
牛客企业服务