萌新求助决策单调性
  • 板块学术版
  • 楼主zjrqaq
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/7/25 21:44
  • 上次更新2023/10/27 18:25:23
查看原帖
萌新求助决策单调性
341649
zjrqaq楼主2022/7/25 21:44

https://www.luogu.com.cn/problem/P5504

这道题,题解说颜色内部的转移具有决策单调性,但是我打表后发现并没有单调性,我是不是哪里理解的有问题/kel

打表的 code:

#include <bits/stdc++.h>
#define int long long

using namespace std;
const int N=2e5+5,mod=1e9+7;
void chkmax(int &x,int y){x=max(x,y);}
void chkmin(int &x,int y){x=min(x,y);}
void Add(int &x,int y){x+=y,x%=mod;}
int ab(int x){if(x<0)x=-x;return x;}

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

int t[N],f[N],n,a[N],mx,las[N];
vector<int>e[N],p[N];

int pai(int x){
	return x*x;
}
signed main(void){
	n=read();
	for(int i=1;i<=n;i++)a[i]=read(),chkmax(mx,a[i]);
	for(int i=1;i<=n;i++){
		e[a[i]].push_back(i);int qwq=0;
		for(int j=0;j<e[a[i]].size();j++){
			if(f[e[a[i]][j]-1]+pai(e[a[i]].size()-j)*a[i]>=f[i])f[i]=f[e[a[i]][j]-1]+pai(e[a[i]].size()-j)*a[i],qwq=j;
		}
		p[a[i]].push_back(qwq);
	} 
	for(int i=1;i<=mx;i++){
		printf("%lld->",i);
		for(int j=1;j<e[i].size();j++){
			if(p[i][j-1]>p[i][j])printf("*"); 
			printf("%lld ",p[i][j]);
		}
		printf("\n");
	}
	printf("%lld\n",f[n]);
	return 0;
}

测试的数据:

https://www.luogu.com.cn/paste/lwufc6v1

2022/7/25 21:44
加载中...