这题为什么要贪心?
查看原帖
这题为什么要贪心?
681036
OldDriverTree楼主2024/4/21 13:39

rt,不能直接 DP\texttt{DP} 吗?设 fi,jf_{i,j} 表示考虑前 ii 个挂饰,还有 jj 个挂钩没用的答案

fi−1,j→fi,j,fi−1,j+bi→fi,j+ai−1f_{i-1,j}\to f_{i,j},f_{i-1,j}+b_i\to f_{i,j+a_i-1}

我这样写为什么 WA 30pts?

#include<bits/stdc++.h>
using namespace std;
const int N=2001;
int f[N][N];

int read() {
	int x=0; bool f=true; char c=0;
	while (!isdigit(c) ) f&=(c^'-'),c=getchar();
	while (isdigit(c) ) x=(x<<3)+(x<<1)+(c&15),c=getchar();
	return f?x:-x;
}
int main()
{
	memset(f,0xaf,sizeof f);
	int n=read(); f[0][1]=0;
	for (int i=1;i<=n;i++)
	{
		int a=read(),b=read();
		for (int j=0;j<=n;j++) {
			f[i][j]=max(f[i][j],f[i-1][j]);
			if (j+a) f[i][min(j+a-1,n)]=max(f[i][min(j+a-1,n)],f[i-1][j]+b);
		}
	}
	int ans=0;
	for (int i=0;i<=n;i++)
	ans=max(ans,f[n][i]);
	return !printf("%d",ans);
}
2024/4/21 13:39
加载中...