[U]3.3.5 博弈原理,DP实现

本文深入探讨了一款游戏问题的解决策略,通过动态规划方法记录状态,巧妙地运用博弈论原理,实现了从问题理解到解题过程的全面解析。详细介绍了如何通过算法优化来提升游戏决策效率,提供了宝贵的实践经验和理论思考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想了很久,看了下题解顿悟了!赤裸裸的使用的博弈的原理,但是却用DP的方法记录状态。收获颇多。

/*
ID:bysen
LANG:C++
PROG:game1
*/
#include<stdio.h>
using namespace std;

int sum[101][101];
int dp[101][101];
int num[101];

int max( int a,int b ){ return a>b?a:b; }
int min( int a,int b ){ return a<b?a:b; }

int main()
{
 	freopen( "game1.in","r",stdin );
 	freopen( "game1.out","w",stdout );
 	int n;
 	scanf( "%d",&n );
 	for( int i=1;i<=n;i++ )
 	{
 		 scanf( "%d",&num[i] );
 		 dp[i][i]=sum[i][i]=num[i];
	}
	
	for( int i=1;i<=n;i++ )
	for( int j=i+1;j<=n;j++ )
	 	 sum[i][j]=sum[i][j-1]+sum[j][j];
 	
 	for( int i=n-1;i>=1;i-- )
	for( int j=i+1;j<=n;j++ ) 
		 dp[i][j]=sum[i][j]-min( dp[i+1][j],dp[i][j-1] );
    /*
    for( int i=1;i<=n;i++ )
    {
     	 for( int j=i+1;j<=n;j++ )
		 	  printf( "%d-%d:%d  ",i,j,dp[i][j] );
		 printf( "\n" );
    }
    */
	printf( "%d %d\n",dp[1][n],sum[1][n]-dp[1][n] );
 	
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值