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

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