【题解】CF1146G Zoning Restrictions
Sol
题解区好像都是网络流的题解,这里给一篇区间 dp 的题解。
思路 by e3c8f1a924
发现数据范围很小,考虑区间 dp。
容易发现,一个限制只与该区间内最高的房屋有关。
那么记
转移的话对于每个区间找出所有完全被这个区间包含的限制。然后暴力枚举最高的房屋进行转移。在用前缀 max 优化即可。
具体实现看代码。
时间复杂度
Code
//LYC_music yyds!
#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0)
#define lowbit(x) (x&(-x))
using namespace std;
inline char gc()
{
static char buf[1000000],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++;
}
int read()
{
int pos=1,num=0;
char ch=getchar();
while (!isdigit(ch))
{
if (ch=='-') pos=-1;
ch=getchar();
}
while (isdigit(ch))
{
num=num*10+(int)(ch-'0');
ch=getchar();
}
return pos*num;
}
void write(int x)
{
if (x<0)
{
putchar('-');
write(-x);
return;
}
if (x>=10) write(x/10);
putchar(x%10+'0');
}
void writesp(int x)
{
write(x);
putchar(' ');
}
void writeln(int x)
{
write(x);
putchar('\n');
}
const int N=60;
int n,h,m,L[N],R[N],x[N],c[N],id[N],dp[N][N][N];
signed main()
{
n=read(); h=read(); m=read();
for (int i=1;i<=m;i++)
L[i]=read(),R[i]=read(),x[i]=read(),c[i]=read(),id[i]=i;
sort(id+1,id+m+1,[](int a,int b)
{
return x[a]>x[b];
});
for (int i=1;i<=n;i++)
{
vector<int> G;
for (int j=1;j<=m;j++)
if (L[id[j]]==i&&R[id[j]]==i) G.emplace_back(id[j]);
int tot=0,cnt=(int)G.size()-1;
for (int j=0;j<=h;j++)
{
while (cnt>=0&&j>x[G[cnt]]) tot+=c[G[cnt]],cnt--;
dp[i][i][j]=j*j-tot;
if (j>0) dp[i][i][j]=max(dp[i][i][j],dp[i][i][j-1]);
}
}
for (int len=2;len<=n;len++)
for (int l=1;l<=n-len+1;l++)
{
int r=l+len-1;
for (int k=l;k<=r;k++)
{
vector<int> G;
for (int j=1;j<=m;j++)
if (L[id[j]]>=l&&r>=R[id[j]]&&L[id[j]]<=k&&R[id[j]]>=k) G.emplace_back(id[j]);
int tot=0,cnt=(int)G.size()-1;
for (int i=0;i<=h;i++)
{
while (cnt>=0&&i>x[G[cnt]]) tot+=c[G[cnt]],cnt--;
dp[l][r][i]=max(dp[l][r][i],dp[l][k-1][i]+dp[k+1][r][i]+i*i-tot);
}
}
for (int i=1;i<=h;i++)
dp[l][r][i]=max(dp[l][r][i],dp[l][r][i-1]);
}
writeln(dp[1][n][h]);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】