其他分享
首页 > 其他分享> > CF1110D Jongmah

CF1110D Jongmah

作者:互联网

传送门:CF or Luogu

题面:

你在玩一个叫做\(Jongmah\)的游戏,你手上有\(n\)个麻将,每个麻将上有一个在\(1\)到\(m\)范围内的整数\(a_i\)。这些麻将可以有两种方式组成三元组:

题解:

很明显这不是个贪心(虽然第一眼看上去有点像),然后就想到了DP。如何进行DP呢?

要有dp[m]表示进行到第\(m\)位时最多形成的三元组个数,但明显无法进行DP,还需要知道sum[i+1],sum[i],sum[i-1]的剩余个数,但知道其中两个就可以知道剩下的一个,所以可以设为dp[i][j][k]表示第\(i\)位用\(j\)个,第\(i-1\)位用\(k\)个

枚举第\(i-1\)位,\(i\)位,\(i+1\)位的选择个数即可

for(int i=1;i<=m;i++)
	for(int a=0;a<3;a++)
		for(int b=0;b<3;b++)
			for(int c=0;c<3;c++){
				if(a+b+c>sum[i])continue;
				if(b+c>sum[i+1])continue;
				if(c>sum[i+2])continue;
				dp[i][c][b]=max(dp[i][c][b],dp[i-1][b][a]+c+(sum[i]-a-b-c)/3);
			}

标签:sum,个数,Jongmah,三元组,continue,dp,CF1110D,DP
来源: https://www.cnblogs.com/wuchen-place/p/15212128.html