c#编程题,进链接或扫描看文本,会的留下代码带注释,感谢

链接: https://pan.baidu.com/s/1LatkwQDwLamkkya96gSRvA

提取码: dk4w 

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp1
{
    public class Program
    {
        static void Main(string[] args)
        {
            int stages = int.Parse(Console.ReadLine());
            if (stages > 100 || stages <= 0)
            {
                Console.WriteLine("Stages must be between 1 and 100.");
                return;
            }

            //dp[s,n] is the max rewards after s rounds with n opponents remained
            int[,] dp = new int[stages + 1, 101];
            // elim is the number of opponents eleminated at each stage
            int[,] elim = new int[stages + 1, 101];

            for (int s = 1; s <= stages; s++)
            {
                for (int p = 1; p <= 100; p++)
                {
                    for (int v = 1; v <= p; v++)
                    {
                        int remain = p - v;
                        var reward = 100000 * v / p + dp[s - 1, p];
                        if (reward > dp[s, remain])
                        {
                            dp[s, remain] = reward;
                            elim[s, remain] = v;
                        }
                    }
                }
            }

            // max reward is dp[stages, 0]
            Console.WriteLine(dp[stages, 0]);
            var eliminate = new List<int>();
            var remained = elim[stages, 0];
            eliminate.Add(remained);
            for (int s = stages - 1; s > 0; s--)
            {
                eliminate.Add(elim[s, remained]);
                remained += elim[s, remained];
            }
            eliminate.Reverse();
            Console.WriteLine(string.Join(" ", eliminate));
        }
    }
}