为什么 E 以一种很奇怪的方式通过了
查看原帖
为什么 E 以一种很奇怪的方式通过了
347664
菲斯斯夫斯基楼主2024/10/5 22:03

rt,为什么乘 50 就能 AC,不乘 50 WA 了 12 个点???感觉很对啊。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e4+10;
int n,m;
int a[N],b[N],p[N],q[N],dp[110][N];
bool check(int k)
{
	int sum=0;
	for(int i=1;i<=n;i++)
	{
		int x=k/(a[i]*b[i]*50);
		sum+=x*dp[i][a[i]*b[i]*50]+dp[i][k-x*a[i]*b[i]*50];
	}
	return sum<=m;
}
signed main()
{
	memset(dp,127/3,sizeof(dp));
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i]>>p[i]>>b[i]>>q[i];
		int s=a[i]*b[i]*50;
		dp[i][0]=0;
		for(int j=a[i];j<=s;j++)
			dp[i][j]=min(dp[i][j],dp[i][j-a[i]]+p[i]);
		for(int j=b[i];j<=s;j++)
			dp[i][j]=min(dp[i][j],dp[i][j-b[i]]+q[i]);
		for(int j=s;j>=1;j--)
			dp[i][j]=min(dp[i][j],dp[i][j+1]);
	}
	int l=0,r=2e9;
	while(l+1<r)
	{
		int mid=(l+r)/2;
		if(check(mid))l=mid;
		else r=mid;
	}
	cout<<l;
	return 0;
}

2024/10/5 22:03
加载中...