洛谷P3507 [POI2010]GRA-The Minima Game
DP,及DP的优化。
这个题显然是一个DP,状态也比较好定义,
定义dp[i]表示双方总共取i个数时,所得到的最大差值。
然后可以得出状态转移方程,即 dp[i]=max(data[j]−dp[j−1]);j<=i 时间复杂度为O(n^2)
然后可以简化一下转移方程,即dp[i]=max(dp[i-1],data[i]-dp[i-1])可得到O(n)的时间复杂度。
该方程的意思就是第i个数时得到的最大差值,如果单独取,那就是data[i]-dp[i-1],如果和前i-1个数在同一时刻取,那结果是dp[i-1]
#include <bits/stdc++.h>
#define N 1010010
#define int long long
using namespace std;
int n, data[N], dp[N];//dp[i]表示双方共取了i个数,所得到的最大差值。
bool cmp(int a, int b) {
return a > b;
}
signed main()
{
scanf("%lld", &n);
for (int i = 1; i <= n; i++)
scanf("%lld", &data[i]);
sort(data + 1, data + 1 + n);
for (int i = 1; i <= n; i++)
dp[i] = max(dp[i - 1], data[i] - dp[i - 1]);
printf("%lld", dp[n]);
return 0;
}
/*
3
1 3 1
2
*/
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 官方的 MCP C# SDK:csharp-sdk
· 一款 .NET 开源、功能强大的远程连接管理工具,支持 RDP、VNC、SSH 等多种主流协议!
· 提示词工程师自白:我如何用一个技巧解放自己的生产力
· 一文搞懂MCP协议与Function Call的区别
· 如何不购买域名在云服务器上搭建HTTPS服务