链接: 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));
}
}
}