提个建议
查看原帖
提个建议
632131
Kevin911楼主2023/11/10 18:12
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=2e6+10;
int k[maxn],c[maxn],dp[maxn];
signed main()
{
	int n,m=0,M;
	cin>>n>>M;
	for(int i=1;i<=n;i++) cin>>k[i];
	for(int i=1;i<=n;i++) cin>>c[i],m+=k[i]*c[i];
	dp[0]=1;
	for(int i=1;i<=n;i++)
		for(int j=m;j>=0;j--)
			for(int p=0;p<=k[i]&&p*c[i]<=j;p++) dp[j]=max(dp[j],dp[j-p*c[i]]*p);
	for(int i=0;i<=m;i++)
		if(dp[i]>=M)
		{
			cout<<i;
			return 0;
		}
}

建议各位在第1515行处加个限制条件dp[j]<m,不然数据范围大一点,数据强的话可能会把代码卡掉

2023/11/10 18:12
加载中...