数模竞赛Paid answer

数模竞赛Paid answer

2023年辽宁省数学建模竞赛

C题 用科幻思维研究智能化战争指挥决策

原题再现:

  随着人工智能技术的迅猛发展,战争形态和作战手段的变革是军事领域智能化发展的关键。伴随着智能化战争的到来,“大狗”机器人、“捕食者”无人机、“震网”病毒攻击、类脑超算系统、意念控制武器、隐形技术等等,这些曾经科幻作品中的武器、技术,越来越多的出现在现实的军事领域中,带来了巨大的军事变革。在未来的智能化战争中,作战空间和作战领域将出现重大改变。作战空间向立体、全维、全领域延展,作战领域向极地、深海、太空等拓展,并向认知域、信息域渗透。例如侵入式独狼作战——单套无人系统独立作战;有人无人协同体系破击战——基于智能无人系统;母舰蜂群集群作战——以母舰为运输载体和指挥中心。智能化战争中的武器装备是围绕特定作战需求和作战能力设计的武器装备类型。根据你对智能化战争的认识和理解,回答以下问题。
  1. 针对未来智能化战争的规模、样式、目的、企图等,运用科幻思维,设计一个智能化战争的场景,设计模拟对抗模式,根据来袭目标和我方武器装备进行战场态势分析。
  2. 结合战场态势分析,根据威胁情况、战场情况和作战需求,形成智能化作战构想图景,根据战场意图和目标建立威胁评估指标体系进行威胁评估分析。
  3. 根据我方武器装备与防御多种手段,借助集群化、自主化作战方式建立防御优化决策模型,并设计智能化作战方案,以实施智能化战争制胜的目标。可从人员调配、情报分析、作战规划、智能优化决策、兵力部署、火力分配等方面考虑(但不限于此,也不需要全部考虑)。

代码示例

#include <cstdio>
#include <algorithm>
#define MAXM 15
#define MAXN (1 << 11)
#define LL long long
#define Int register int
inline void read(int &x)
{
 x = 0;
 int f = 1;
 char s = getchar();
 while (s < '0' || s > '9')
 {
  if (s == '-')
   f = -1;
  s = getchar();
 }
 while (s >= '0' && s <= '9')
 {
  x = (x << 3) + (x << 1) + (s ^ 48);
  s = getchar();
 }
 x *= f;
}
int Max(int x,int y)
{
 return x > y ? x : y;
}
bool da[MAXM];
int n, m, fi[MAXN][MAXM], pl[MAXN][MAXM], dp[MAXN][MAXN];
void dfs(int x,int depth)
{
 for (Int i = 0; i <= 1 << depth; ++ i)
  dp[x][i] = 0; // 初始化 
 if (! depth)
 {
  for (Int i = 1; i <= n; ++ i)
   if (da[i])
    dp[x][1] += fi[x][i]; 
   else dp[x][0] += pl[x][i];
  return ;
 }
 for (Int zt = 0; zt <= 1; ++ zt)
 {
  da[depth] = zt; // 选择该子树的状态 
  dfs(x * 2, depth - 1);
  dfs(x * 2 + 1, depth - 1);
  for (Int i = 0; i <= 1 << depth - 1; ++ i)
   for (Int j = 0; j <= 1 << depth - 1; ++ j)
    dp[x][i + j] = Max(dp[x][i + j], dp[x * 2][i] + dp[x * 2 + 1][j]); // 该子树的值为左子树某状态加右子树某状态最大值 
 }
}
int main()
{
 read( n ); read( m ); n --;
 for (Int i = 1 << n; i < 1 << n + 1; ++ i)
  for (Int j = 1; j <= n; ++ j)
   read( fi[i][j] );
 for (Int i = 1 << n; i < 1 << n + 1; ++ i)
  for (Int j = 1; j <= n; ++ j)
   read( pl[i][j] );
 dfs(1, n);
 int Ans = 0;
 for (Int i = 0; i <= m; ++ i)
  Ans = Max(Ans, dp[1][i]);
 printf("%d", Ans);
 return 0;
}
11-08 15:38