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