Python 有没有办法解决这个问题?
阿莎和阿玛正在玩一个电子游戏。这是一个两人游戏,第二个玩家是助手。Asha在玩她最喜欢的游戏时,需要你帮助她最大限度地获得金牌。两人都面对着外星人。阿莎和阿玛都在同一个地点,外星人在他们面前排成一排。亚莎和阿玛轮流射击外星人,她先去。在轮到她时,阿莎可以选择任何外星人射击,这意味着阿莎可以选择跳过一个回合。在轮到阿玛时,阿玛总是射杀离他最近的外星人,以帮助阿莎最大化她的黄金。亚莎和阿玛不能射杀死去的外星人 如果阿莎向一个外星人射击,它的生命值将减少p。如果阿玛向一个外星人射击,它的生命值将减少Q。如果一个外星人的生命值低于1,它将被杀死。第i个外星人以Hi生命点开始。如果阿莎的枪杀了第i个外星人,她将获得Gi金,但如果阿玛的枪杀了它,则不会获得任何奖励。阿莎最多能获得多少黄金 输入: 每种情况都从一行开始,其中包含三个表示p、Q和N的空格分隔整数。然后是N行,第i行包含两个表示Hi和Gi的空格分隔整数。这些外星人是按照他们与亚沙和亚马尔的距离排列的。换句话说,只有在所有外星人都死了的情况下,阿马尔才会向第i个外星人开枪 输出-阿莎能获得的最大黄金量 输入 20603 80100 80 200 120 300 产出-500 说明: 亚莎应该放弃第一个外星人。在她的前两个回合中,她应该软化第三个外星人,将其降低到80生命,使她能够轻松地在第二个和第三个外星人身上获得最后一击 以下是一些其他测试用例: 输入 50602 40100 4090 产出-100 输入 50602 40100 40200 产出-200 输入 50 100 2 60100 60 200 产出-200 输入 504002 60100 190 200 输出-0 我的代码:Python 有没有办法解决这个问题?,python,dynamic-programming,greedy,Python,Dynamic Programming,Greedy,阿莎和阿玛正在玩一个电子游戏。这是一个两人游戏,第二个玩家是助手。Asha在玩她最喜欢的游戏时,需要你帮助她最大限度地获得金牌。两人都面对着外星人。阿莎和阿玛都在同一个地点,外星人在他们面前排成一排。亚莎和阿玛轮流射击外星人,她先去。在轮到她时,阿莎可以选择任何外星人射击,这意味着阿莎可以选择跳过一个回合。在轮到阿玛时,阿玛总是射杀离他最近的外星人,以帮助阿莎最大化她的黄金。亚莎和阿玛不能射杀死去的外星人 如果阿莎向一个外星人射击,它的生命值将减少p。如果阿玛向一个外星人射击,它的生命值将减少Q
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()
我绞尽脑汁,由于黄金也没有分类,我认为贪婪的方法行不通。谁能为这个问题提供解决方案
提前感谢。这是一个代码,我的朋友在编码轮次中问同一个问题时尝试过,它通过了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);
}
}
到目前为止你做了什么?我已经添加了我的代码,但它并没有解决问题@Hoppo@Stryken_03请解释你的意思,它不能解决问题。它会产生错误吗?给它不同于你期望的输出,它给你什么输出,你期望什么?仅仅说它不起作用是不够的。我的代码产生的答案是错误的。它并不满足所有的测试用例@德西姆