Java实现 蓝桥杯 算法提高 进攻策略加强(暴力)

Winema ·
更新时间:2024-11-11
· 677 次阅读

试题 算法提高 进攻策略加强

问题描述
  植物大战僵尸这款游戏中,还有一个特别的玩儿法:玩家操纵僵尸进攻植物。
  首先,僵尸有m种(每种僵尸都是无限多的),玩家可以选择合适的僵尸来进攻。使用第i种僵尸需要花费Wi资源,可以得到Pi的攻击效果。在这里,我们认为多个僵尸总的攻击效果就是他们每个攻击效果的代数和。
  地图共有n行,对于第i行,最左端有若干植物,这些植物需要至少Qi的攻击才能被全部消灭。若一行上的植物全部被消灭,我们称这一行被攻破。
  由于资源紧张,你只有总量为K的资源,不一定能够攻破所有行。但统治者希望攻破相邻的T行,并希望T尽量的大。你能帮他算出T的值吗?
输入格式
  第一行三个非负整数:m、n、K;
  第二行m个正整数,第i个数表示Wi;
  第三行m个正整数,第i个数表示Pi;
  第四行n个非负整数,第i个数表示Qi。
输出格式
  3 11 39
  5 2 11
  3 1 7
  5 3 6 10 3 2 4 200 1 1 1
样例输入
一个满足题目要求的输入范例。
例:
2 2
1 2
3 4
样例输出
4
数据规模和约定
  对于70%的数据:n<=1000

对于100%的数据:n<=200000,m<=100,K<=1000000,所有Pi、Qi<=100000000

PS:
感觉这个题没描述清除,很烦
这个题应该可以算暴力,因为我是暴力过去的,把每一种可能都循环一遍
后面通过map记录一下,减少循环,类似于剪枝的操作吧

package 蓝桥杯官网; import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class 进攻策略加强 { public static void main(String[] args) { Scanner s = new Scanner(System.in); int m = s.nextInt(); int n = s.nextInt(); int k = s.nextInt(); int []wi = new int[m]; int []pi = new int[m]; for (int i = 0; i < pi.length; i++) { wi[i] = s.nextInt(); } for (int i = 0; i < pi.length; i++) { pi[i] = s.nextInt(); } int []qi = new int[n]; for (int i = 0; i =0; i--) { for (int j = 0; j+i>=i&&j+i < n; j++) { int a = k; int count = 0; for (int z = j; z =x) { count++; a-=x; }else { break; } } if(count>T) { T = count; if(T>=i+1) { System.out.println(T); return; } } } } System.out.println(T); } static Map map = new HashMap(); public static int getPrefferred(int []wi,int []pi,int []qi,int index) { Integer dp = map.get(qi[index]); if(dp!=null) return dp; int price = Integer.MAX_VALUE; int minIndex = 0; for (int i = 0; i < wi.length; i++) { int pc =(int)( Math.ceil(qi[index]*1.0/pi[i])*wi[i]); if(pc<price) { price = pc; minIndex = i; } } map.put(qi[index], price); return price; } } 南 墙 原创文章 1881获赞 3万+访问量 626万+ 关注 他的留言板 展开阅读全文
作者:南 墙



JAVA 蓝桥杯 算法

需要 登录 后方可回复, 如果你还没有账号请 注册新账号