Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有办法解决这个问题?_Python_Dynamic Programming_Greedy - Fatal编程技术网

Python 有没有办法解决这个问题?

Python 有没有办法解决这个问题?,python,dynamic-programming,greedy,Python,Dynamic Programming,Greedy,阿莎和阿玛正在玩一个电子游戏。这是一个两人游戏,第二个玩家是助手。Asha在玩她最喜欢的游戏时,需要你帮助她最大限度地获得金牌。两人都面对着外星人。阿莎和阿玛都在同一个地点,外星人在他们面前排成一排。亚莎和阿玛轮流射击外星人,她先去。在轮到她时,阿莎可以选择任何外星人射击,这意味着阿莎可以选择跳过一个回合。在轮到阿玛时,阿玛总是射杀离他最近的外星人,以帮助阿莎最大化她的黄金。亚莎和阿玛不能射杀死去的外星人 如果阿莎向一个外星人射击,它的生命值将减少p。如果阿玛向一个外星人射击,它的生命值将减少Q

阿莎和阿玛正在玩一个电子游戏。这是一个两人游戏,第二个玩家是助手。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

我的代码:

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请解释你的意思,它不能解决问题。它会产生错误吗?给它不同于你期望的输出,它给你什么输出,你期望什么?仅仅说它不起作用是不够的。我的代码产生的答案是错误的。它并不满足所有的测试用例@德西姆