Codeforces Gym101502 J-取数博弈
2024-08-30 07:13:36
还有J题,J题自己并不是,套的板子,大家写的都一样,因为大家都是套板子过的,贴一下代码,等学会了写一篇博客。。。
代码:
1 //J. Boxes Game-取数博弈-不会,套的板子
2 #include<iostream>
3 #include<algorithm>
4 #include<cstdio>
5 #include<cstring>
6 #include<cmath>
7 using namespace std;
8 const int maxn=1e3+10;
9 int nums[maxn];
10 int dp[maxn][maxn];
11 int main()
12 {
13 int t,n;
14 scanf("%d",&t);
15 while(t--){
16 cin>>n;
17 int sum=0;
18 memset(nums,0,sizeof(nums));
19 memset(dp,0,sizeof(dp));
20 for(int i=0;i<n;++i)
21 {
22 cin>>nums[i];
23 sum+=nums[i];
24 }
25 int len=0;
26 //分n为奇偶分类讨论下初始情况,len是区间[st,en]的长度-1
27 if(n%2==1)
28 {
29 for(int i=0;i<n;++i)
30 dp[i][i]=nums[i];
31 len = 2; //倒数下一轮的区间长度
32 }
33 else
34 {
35 for(int i=0;i<n-1;++i)
36 {
37 dp[i][i+1] = max(nums[i],nums[i+1])-min(nums[i],nums[i+1]);
38 }
39 len =3;
40 }
41 while(len<n)
42 {
43 for(int i=0;i+len<n;++i)
44 {
45 dp[i][i+len]=max(min(nums[i]-nums[i+1]+dp[i+2][i+len],nums[i]-nums[i+len]+dp[i+1][i+len-1]),
46 min(nums[i+len]-nums[i+len-1]+dp[i][i+len-2],nums[i+len]-nums[i]+dp[i+1][i+len-1]));
47 }
48 len+=2;
49 }
50 cout<<(sum+dp[0][n-1])/2-(sum-dp[0][n-1])/2<<endl;
51 }
52 return 0;
53 }
最新文章
- js中的日期控件My97 DatePicker---那些打酱油的日子
- POJ3579 Median
- hibernate 对应关系级联的意思
- 开启VMware Esxi的SSH远程登录
- 【BZOJ 1079】[SCOI2008]着色方案
- sencha touch mvc
- AFNetworking自带的解析图片的方法
- noip 2012 疫情控制
- Tableau Desktop 10.4.2 的安装和激活
- UNIX环境高级编程——信号之kill、raise、killpg、alarm、pause、abort、sleep、usleep、nanosleep和setitimer函数
- yii2.0 路由美化以及自定义设置
- sql查询当前登陆人所管理的校区下的人员
- 2082 : Only choose one
- transfer.sh:通过命令行简单的创建文件分享
- ros自定义消息的时候报错ImportError: No module named em
- Esper学习之十四:Pattern(一)
- 利用Teensy进行em410x卡模拟以及暴力破解em410x类门禁系统
- DoTween用法教程
- Day 34 黏包
- 浅谈jQuery构造函数