Asha和Amar正在玩SpaceKings电子游戏。这是一个两人游戏,第二人是助手。 Asha在玩自己喜欢的游戏时需要您的帮助,以最大限度地发挥自己的价值。两者都面对N个外星人。阿莎(Asha)和阿玛(Amar)都在一个地方,外星人排在他们前面。阿莎(Asha)和阿玛(Amar)轮流射击外星人,她先走了。在她的回合期间,Asha可以选择向其射击的任何外星人(这意味着Asha可以选择跳过转弯)。在转弯期间,Amar总是向离他最近的外星人开枪,以帮助Asha最大化自己的金币。阿莎(Asha)和阿玛(Amar)不能射击死去的外星人。
如果阿莎向某外星人射击,其生命值降低P。如果阿玛向某外星人射击,其生命值降低Q。如果外星人的生命值低于1,则将其杀死。第i个外星人以生命值高开始。如果Asha的射杀杀死了第i个外星人,Asha会获得Gi的金牌,但是如果Amar的射杀杀死了外星人,Asha不会获得Gi的金币。阿莎可以获得的最大黄金量是多少?
输入:
每种情况都从一行包含代表P,Q和N的三个以空格分隔的整数开始。然后是N行,第i行包含代表Hi和Gi的两个以空格分隔的整数。外星人按其与阿莎和阿马尔的距离顺序给出。换句话说,只有当所有外星人<我都死了时,阿玛才会向第i个外星人开枪。
输出-阿莎可以获得的最大黄金量
输入
20 60 3
80 100
80 200
120300
输出-500
阿莎应该放弃第一个外星人。在她的前两个回合中,她应该软化第三个外星人,使其降至80 hp,以便轻松获得第二个和第三个外星人的最后一击。
这里还有一些其他测试用例:
输入
50 60 2
40100
40 90
输出-100
输入
50 60 2
40100
40200
输出-200
输入
50 100 2
60100
60200
输出-200
输入
50 400 2
60100
190200
输出-0
我的代码:
def maxGold(asha , amar , strength):
possible = 0
first , last = 0 , len(strength) - 1
while True:
strength[last][0] -= asha
strength[first][0] -= amar
if strength[last][0] < 0:
possible += strength[last][1]
last -= 1
if strength[first][0] < 0:
first += 1
if first > last:
break
return possible
def main():
asha , amar , aliens = list(map(int , input().split()))
strength = []
for i in range(1 , aliens+1):
strength.append(list(map(int, input().split())))
answer = maxGold(asha , amar , strength)
print(answer)
main()
我已经绞尽脑汁,而且由于黄金也没有分类,我认为贪婪的方法行不通。谁能提供解决这个问题的方法?
谢谢。
答案 0 :(得分:1)
这是我的朋友在一个编码回合中问相同问题时尝试的一个代码,它在14个案例中通过了8个案例。
import java.io.*;
import java.util.Arrays;
class code
{
private void maxGold(int P, int Q, int n, int[] alien, int[] gold)
{
if(n == 2)
{
if((alien[0]<P && alien[1]<P && alien[0]<Q && alien[1]<Q) || (alien[0]>P && alien[1]<2*P && alien[0]<Q && alien[1]<Q))
{
System.out.println(Math.max(gold[0],gold[1]));
}
else
{
System.out.println(0);
}
}
else
{
int val = P/Q;
if(val%2!=0 || val==0)
{
Arrays.sort(gold);
int s=0;
for (int i = 0; i <n ; i++) {
s += gold[i];
}
System.out.println(s-gold[0]); //EDITED
}
else
{
int s=0;
for (int i = 0; i <n ; i++) {
s += gold[i];
}
System.out.println(s);
}
}
}
public static void main(String[] args) throws Exception
{
code object = new code();
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
String[] str1 = buf.readLine().split(" ");
int P = Integer.parseInt(str1[0]);
int Q = Integer.parseInt(str1[1]);
int N = Integer.parseInt(str1[2]);
int[] alien = new int[N];
int[] gold = new int[N];
for(int i=0;i<N;i++)
{
String[] temp = buf.readLine().split(" ");
alien[i] = Integer.parseInt(temp[0]);
gold[i] = Integer.parseInt(temp[1]);
}
object.maxGold(P,Q,N,alien,gold);
}
}