2025年进攻策略蓝桥杯

进攻策略蓝桥杯1 进攻策略 问题描述 植物大战僵尸这款游戏中 还有一个特别的玩儿法 玩家操纵僵尸进攻植物 首先 僵尸有 m 种 每种僵尸都是无限多的 玩家可以选择合适的僵尸来进攻 使用第 i 种僵尸需要花费 Wi 资源 可以得到 Pi 的攻击效果 在这里

大家好,我是讯享网,很高兴认识大家。

1、进攻策略

问题描述   植物大战僵尸这款游戏中,还有一个特别的玩儿法:玩家操纵僵尸进攻植物。   首先,僵尸有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 样例输出 4 数据规模和约定   对于70%的数据:n<=1000 对于100%的数据:n<=,m<=100,K<=,所有Pi、Qi<= 

讯享网

在这里插入图片描述
讯享网

讯享网import java.io.ObjectInputStream.GetField; import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class jingong { 
    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<qi.length;i++) { 
    qi[i]=s.nextInt();//每行的防守力 } //键盘输入结束 int T=0; for(int i=n-1;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<=j+i;z++) { 
    int x=getPrefferred(wi,pi,qi,z); if(a>=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<Integer,Integer> map=new HashMap<Integer,Integer>(); 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; } } 
1.Math.round():根据“round”的字面意思“附近、周围”,可以猜测该函数是求一个附近的整数,看下面几个例子就明白。 小数点后第一位<5 正数:Math.round(11.46)=11 负数:Math.round(-11.46)=-11 小数点后第一位>5 正数:Math.round(11.68)=12 负数:Math.round(-11.68)=-12 小数点后第一位=5 正数:Math.round(11.5)=12 负数:Math.round(-11.5)=-11 总结:(小数点后第一位)大于五全部加,等于五正数加,小于五全不加。 2.Math.ceil():根据“ceil”的字面意思“天花板”去理解; 例如: Math.ceil(11.46)=Math.ceil(11.68)=Math.ceil(11.5)=12 Math.ceil(-11.46)=Math.ceil(-11.68)=Math.ceil(-11.5)=-11 3.Math.floor():根据“floor”的字面意思“地板”去理解; 例如: Math.floor(11.46)=Math.floor(11.68)=Math.floor(11.5)=11 Math.floor(-11.46)=Math.floor(-11.68)=Math.floor(-11.5)=-12 
小讯
上一篇 2025-02-22 07:51
下一篇 2025-02-23 13:59

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/119310.html