<span>CF1398D 【Colored Rectangles】</span>

题目翻译

给出 \(R\) 对红色木棍 \(r_1,r_2...r_R\)\(G\) 对绿色木棍 \(g_1,g_2...g_G\)\(B\) 对蓝色木棍 \(b_1,b_2...b_B\) 的长度( \(R,G,B \le 200\) ),每次可以选出两对颜色不同的木棍组成一个矩形,每对木棍只能使用一次,木棍可以有剩余。请最大化所有组成的矩形的面积。

思路

很容易想到一个贪心的思路即在同一种颜色的木棍中,如果一对长度为 \(k\) 的木棍选过,那么所有长度大于 \(k\) 的木棍都已经选过。

那么可以先将每种颜色的木棍排降序,这样最优解所选的木棍一定是这个颜色的一个前缀。

这样的话再进行dp就很简单了,设 \(dp_{i,j,k}\) 为已经选了 \(1\sim i\) 中的所有红色木棍,\(1\sim j\) 中的所有绿色木棍,\(1\sim k\) 中的所有蓝色木棍。

转移即:

\[dp_{i+1,j+1,k}=\max(dp_{i+1,j+1,k},dp_{i,j,k}+r_{i+1}\times g_{j+1}) \]
\[dp_{i,j+1,k+1}=\max(dp_{i,j+1,k+1},dp_{i,j,k}+g_{j+1}\times b_{k+1}) \]
\[dp_{i+1,j,k+1}=\max(dp_{i+1,j,k+1},dp_{i,j,k}+r_{i+1}\times b_{k+1}) \]

时间复杂度:\(\text{O}(R\times G\times B)\)

Code

#include<bits/stdc++.h>

using namespace std;

int read()
{
	int ans=0,f=1;
	char b=getchar();
	while(b>'9'||b<'0'){if(b=='-')f=-1;b=getchar();}
	while(b>='0'&&b<='9'){ans=ans*10+b-'0';b=getchar();}
	return ans*f;
}

const int N=205;
int R,G,B,r[N],g[N],b[N],dp[N][N][N],ans;

bool cmp(int a,int b)
{
	return a>b;
}

signed main()
{
	R=read();G=read();B=read();
	for(int i=1;i<=R;++i)
		r[i]=read();
	for(int i=1;i<=G;++i)
		g[i]=read();
	for(int i=1;i<=B;++i)
		b[i]=read();
	sort(r+1,r+1+R,cmp);
	sort(g+1,g+1+G,cmp);
	sort(b+1,b+1+B,cmp);
	for(int i=0;i<=R;++i)
		for(int j=0;j<=G;++j)
			for(int k=0;k<=B;++k)
			{
				dp[i+1][j+1][k]=max(dp[i+1][j+1][k],dp[i][j][k]+r[i+1]*g[j+1]);
				dp[i][j+1][k+1]=max(dp[i][j+1][k+1],dp[i][j][k]+g[j+1]*b[k+1]);
				dp[i+1][j][k+1]=max(dp[i+1][j][k+1],dp[i][j][k]+r[i+1]*b[k+1]);
				ans=max(ans,dp[i][j][k]);
			}
	printf("%d\n",ans);
	return 0;
}
全部评论

相关推荐

2025-12-12 19:01
南京航空航天大学 C++
秋招没咋投,准备&nbsp;wxg&nbsp;转正之后摆烂了。结果不堪字节&nbsp;HR&nbsp;的骚扰还是面了一下字节。之前想去字节的时候怎么面都挂。现在想着随便面一下结果三面技术面都意外顺利还有加面。十月中旬字节发了意向,wxg&nbsp;转正结果无响应。十月底字节拉了保温群,wxg&nbsp;口头通过,系统显示考核中。十一月初和字节&nbsp;ld&nbsp;交流之后得知&nbsp;base&nbsp;居然能选海外,甚至能小&nbsp;wlb&nbsp;一下,wxg&nbsp;无响应无人联系。十一月中旬把字节&nbsp;base&nbsp;转到了海外,wxg&nbsp;流程灰了,一问超时忘处理了,过两天又变考核中了。十一月下旬字节换了海外&nbsp;HR&nbsp;对接,问了期望薪资,wxg&nbsp;考核终于显示通过,无&nbsp;HR&nbsp;保温,无其他保温。十一月底给字节报了个天价,想吓吓他们,同时告诉微信字节要开了,微信无响应。同样十一月底字节&nbsp;HR&nbsp;告诉我确实给不到那么高,但是能拿期权补上,问能不能接受。微信无响应。同样十一月底字节&nbsp;HR&nbsp;告知了具体方案,符合预期。&nbsp;微信无响应。十二月上旬催&nbsp;wxg&nbsp;不开我就盲拒了,wxg&nbsp;HR&nbsp;火急火燎的打电话问情况,问期望。我给了一个不算夸张的总包数字,因为今年市场在涨,过了三天还不联系我,我再催,约时间下午打电话,非得在我给出的数字上压下去几万,微信又不差这点,为什么不能满足我,让我没有拒绝的理由呢?一番纠结抗争,求稳还是追求挑战,最终选择接受迎接新的挑战,因为堂吉诃德永远不会停下脚步!回想起来,在&nbsp;wxg&nbsp;谈薪的阶段,我认为并没有给予我一定的重视,即使&nbsp;HR&nbsp;表示我在实习期间的表现和之前的面评都很靠前。也没有感觉到想要争取我,虽然我表示拒了&nbsp;offer&nbsp;之后要给我加面委定&nbsp;t6&nbsp;再涨,但我三个月没面试让我面面委那就是白给,还是算了。有缘再见了我亲爱的&nbsp;wxg,再见了曾经的梦中情厂,再见亲爱的&nbsp;mt,再见亲爱的朋友们。也再见,北京的一切。我想润了。秋招结束,卸载牛客,下一个三年,下一个五年,下一个十年后再来看看。
面试中的大熊猫爱吃薯...:我嫉妒得狗眼通红
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务