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;
}