〔USACO16OPEN〕 248 G 踩坑QwQ

封面

同步博文

做DP,踩大坑,QwQ 出师不利 QwQ

  🧐题目链接luogu

  坑点:区间合并的合法性

本来想练练板子,套套规律, 刷刷AC率的。没想到踩大坑了QwQ

所有的解释在代码中

#include <bits/stdc++.h>
using namespace std;
int n,ans=0,in[1000];
int f[500][500];
int main() {
  // freopen("in.txt","r",stdin);
  scanf("%d",&n);
  for(int i=1;i<=n;i++){scanf("%d",&in[i]);}
  for(int i=1;i<=n;i++){f[i][i]=in[i];ans=max(ans,in[i]);}
	
  for(int len=2;len<=n;len++){
	for(int l=1,r=len;r<=n;l++,r++){
	  for(int k=l;k<=r;k++){
		if (f[l][k]==f[k+1][r]){
		  f[l][r]=max(f[l][r],f[l][k]+1);
			ans=max(ans,f[l][r]);
		  }
			///
			// else f[l][r]=max(f[l][r],max(f[l][k],f[k+1][r]));/// 
			//hack样例 3     2 1 2   (源于洛谷@lhzawa)///
			//这个写法就是   不是完全相同也能合并了///
			//你看,在区间1~2的时候,有数1,2那么会执行这一句,f[1][2]答案为2//
			//但是我们知道,这里不能这样和并,要不后面3好位的合并就会出现错误,///
			//我们的意思是取两个小区间的最大值作为区间结果的,
			//那么我们可以提前预处理,直接找到最大区间的1~n的(如果1~n的都无法正常合并)///
			//这算是一个非常隐蔽的错误了
			//
	  }
	}
  }
  // cout<<f[1][n]<<"\n";
  cout<<ans<<"\n";//其实只要把endl改为"\n",用printf()和cout都一样
  return 0;
}

PS:vscode有毒,我的斜杠怎么对不齐啊,明明都是英文标点QwQ,我的强迫症啊

[补] luogu [SDOI2008] 石子合并并不是区间DP,QwQ,exlg,这题是Garsia-Wachs算法

[cover 画师 - ヒトこもる]选它原因,我踩坑后的心情 (绝对不是因为她可爱(●’◡’●))


🍂全文完↩︎
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值