首页 > 其他分享 >A. Flipping Game

A. Flipping Game

时间:2023-12-02 16:11:46浏览次数:48  
标签:int Flipping cin Game vector ans aligned dp

A. Flipping Game

本质上是让我们找出一段区间内\(0\)的个数大于\(1\)的个数的最多的区间,且必须进行一次操作,所以可以考虑区间\(dp\),或者最小子序列和

1 最小子序列和

\[\begin{aligned} dp_i是以a_i结尾的最小子序列和 \\ dp_i=\min(dp_{i-1}+a[i],a[i]) \end{aligned} \]

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n';

using namespace std;
using i64 = long long;

typedef pair<i64, i64> PII;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int n;
	cin >> n;
	vector<int> a(n + 1);
	i64 ans = 0 ;
	for (int i = 1; i <= n; i ++) {
		cin >> a[i];
		ans += a[i];
		if (!a[i]) a[i] = -1;
	}
	if (ans == n) ans --;
	vector<int> dp(n + 1);
	int k = 0;
	for (int i = 1; i <= n; i ++) {
		dp[i] = min(dp[i - 1] + a[i], a[i]);
		if (dp[i] < dp[k])
			k = i;
	}

	cout << ans - dp[k] << '\n';

	return 0;
}

2 区间dp

\[\begin{aligned} dp_{i,j}&为从i到j区间所有元素取反的和 \\ dp_{i,j}&=\max(dp_{i+1,j}+(1-a_i),dp_{i,j-1}+(1-a_j)) \end{aligned} \]

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n';

using namespace std;
using i64 = long long;

typedef pair<i64, i64> PII;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int n;
	cin >> n;
	vector<int> a(n + 1), pre(n + 1);
	vector dp(n + 2, vector<int>(n + 2));
	int ans = 0 ;
	for (int i = 1; i <= n; i ++) {
		cin >> a[i];
		pre[i] = pre[i - 1] + a[i];
		dp[i][i] = a[i] ^ 1;
	}

	for (int len = 1; len <= n; len ++) {//枚举区间长度
		for (int i = 1; i + len - 1 <= n; i ++) {
			int j = i + len - 1;
			dp[i][j] = max(dp[i + 1][j] + (a[i] ^ 1), dp[i][j - 1] + (a[j] ^ 1));
			ans = max(ans, pre[i - 1] + dp[i][j] + pre[n] - pre[j]);
		}
	}

	cout << ans << '\n';

	return 0;
}

标签:int,Flipping,cin,Game,vector,ans,aligned,dp
From: https://www.cnblogs.com/Kescholar/p/17871740.html

相关文章

  • Codeforces Round 912 (Div. 2) E - Geo Game
    考虑什么时候会改变答案的奇偶,显然可以根据\(x\oplusy\)的奇偶性分组,在组内进行跳跃不会改变,只有当组间跳跃的时候才会改变。打表观察先手什么时候必胜,其中:\(u\)是当前获胜目标为奇/偶(1/0),\(v\)是位于哪一组,\(a,b\)代表两组还剩多少,\(st\)代表当前答案的奇偶性。intdfs(intu,......
  • Game Physics
    BasicconceptsformphysicsRigidBodyClassificationSingleparticlesandparticlessystemareexamplesofdiscretematerial.Thestandardnotationis\[Q_{total}=\sum\limits_{i=1}^{p}Q_{i}\]Anothertypeofbodyisreferredtoasacontinuousma......
  • [Codeforces] CF1747C Swap Game
    游戏(game.cpp)—CF1747C—1200\(时间:1s\space|\space空间:250MB\)题面翻译Alice和Bob两个人在玩游戏。有一个长度为\(n\)的序列\(a\),Alice和Bob两人轮流完成一个操作,Alice先开始。每个人可以将数列的第一个数减\(1\),并将它与后面序列的一个数进行交换,如果一个......
  • 0xGame week4-WEB wp
    0xGame个人结语完结撒花!!!学到了很多很多,算是我这个WEB菜鸡过渡期的一个见证吧。0xGame虽然也没做出来几道(大嘘),但是一步步跟着复现也学了很多好玩的知识点和思路,希望下次能进化成WEBak哥hhhhhh~~~~来看最后一周,全是java框架,麻了。spring整体不难,hint把解题方法基本写脸上了,网上......
  • pygame播放视频并实现音视频同步
    一、前言在我接触pygame时最新的pygame已经不支持movie模块,这就导致在pygame播放视频变成一个问题,网上搜了下解决方案有两个:一是使用opencv播放视频,再结合pygame.mixer来播放音频二是使用moviepy播放视频,再结合pygame.mixer播放音频上述两个方案其实都是先将mp4的视频分离成“......
  • 俄罗斯方块、pygame的学习与实践
    俄罗斯方块、pygame的学习与实践目录俄罗斯方块、pygame的学习与实践俄罗斯方块tkinterPygame介绍null俄罗斯方块相信绝大对数同学都玩过,现在学习用Python实现。tkinter发现参考资料使用tkinter,所以先学习tkinter(此处省略10086条tkintker学习)Pygame介绍Pygame是一个用......
  • 【re】[HGAME 2023 week3]kunmusic -- .net程序逆向,z3库约束
    附件下载下来有三个东西。点开exe,发现是鸡哥判断应该是.net程序(.NET是一个免费的跨平台开源开发人员平台,用于生成许多不同类型的应用程序。凭借.NET,可以使用多种语言、编辑器和库来生成Web、移动应用、桌面应用、游戏和IoT应用),可以用dnspy打开,那个exe和json打开后都......
  • Solution - Partition Game
    Link.做vjudge的题有一种美丽的窒息的感觉。设\(f_{i,j}\)表示前\(i\)个选\(j\)段出来的最小代价,转移\(f_{i,j}=\min_{0\leqk<i}\{f_{k,j-1}+w_{k+1,i}\}\),\(w_{k+1,i}\)是\([k+1,i]\)这一段的代价,时间复杂度\(O(n^2k)\),然后就不会做了/l......
  • 【题解 CF1628D2】 Game on Sum
    GameonSum(HardVersion)题面翻译Alice和Bob正在玩一个游戏,游戏分为\(n\)个回合,Alice和Bob要轮流对一个数\(x\)进行操作,已知这个数初始值是\(0\)。具体每个回合的行动规则如下:Alice选择一个在区间\([0,k]\)之间的实数\(t\)。Bob可以选择让\(x\)变成\(......
  • CodeForces 1895E Infinite Card Game
    洛谷传送门CF传送门容易转化成经典的有向图博弈模型。每张牌建一个点,若\(x\)能打败\(y\)就连一条\(x\toy\)的边。入度为\(0\)的点为必败态,之后类似拓扑排序倒推即可。具体就是若存在边\(u\tov\),若\(u\)为必败态则\(v\)为必胜态并加入队列;若\(v\)的所有前驱......