萌新求助这dp为什么不用初始化
查看原帖
萌新求助这dp为什么不用初始化
578932
AlphaGuo楼主2022/11/21 13:03

我写的O(tm)O(tm)暴力,直接交上去WAWA了把初始化去掉就对了。。

#include<bits/stdc++.h>

using namespace std;

const int N=4*1e6+5;

int n,m,mxt,ans=INT_MAX,sum[N],cnt[N],f[N];

ifstream fin("sample.in");

inline int max(int a,int b){return a>b?a:b;}
inline int min(int a,int b){return a<b?a:b;}
int main(){
	fin>>n>>m;
	memset(f,0x3f,sizeof(f));//就这里,去掉就对了
	for(int i=1,tem;i<=n;i++)
		fin>>tem,sum[tem]+=tem,cnt[tem]++,mxt=max(mxt,tem);
	for(int i=1;i<=mxt+m;i++)sum[i]+=sum[i-1],cnt[i]+=cnt[i-1];
	for(int i=1;i<mxt+m;i++){
		f[i]=cnt[i]*i-sum[i];
		for(int j=max(0,i-2*m+1);j<=i-m;j++)
			f[i]=min(f[i],f[j]+(cnt[i]-cnt[j])*i-(sum[i]-sum[j]));
		if(i>=mxt)ans=min(ans,f[i]);
	}
	return cout<<ans<<endl,0;
}
2022/11/21 13:03
加载中...