蒙蔽70分
查看原帖
蒙蔽70分
141335
qwq2519楼主2020/8/28 18:09
#include<bits/stdc++.h>
#define rep(i,j,k) for(register int i(j);i!=(k+1);++i)
#define drp(i,j,k) for(register int i(j);i>=k;--i)
using namespace std;
const int N=3021;
int n;
int cost[N],value[N],num[N];
int f1[2500][2500],f2[2500][2500];
inline void read(int &x)
{
	x=0;register char ch=getchar();int w=0;
	while(ch>'9'||ch<'0'){w|=ch=='-';ch=getchar();}
	while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch&15);ch=getchar();}
	w? x=~(x-1):x;
} 
int count1,VALUE[380217],COST[380217],bian[380217];
int main()
{
//	freopen("bag.in","r",stdin);
//	freopen("bag.out","w",stdout);
	    read(n);
        rep(i,0,n-1)
        {
        	read(cost[i]);
			read(value[i]);
			read(num[i]);
            for(int j=1; j<=num[i]; j<<=1)
            {
                VALUE[count1]=j*value[i];
                bian[count1]=i;
                COST[count1++]=j*cost[i];
                num[i]-=j;
            }
            if(num[i])
            {
                VALUE[count1]=num[i]*value[i];
                bian[count1]=i;
                COST[count1++]=num[i]*cost[i];
            }
        }
        
        rep(i,0,count1)
		{	
		 rep(j,0,1000)f1[i][j]=f1[i-1][j];
		 drp(j,1000,COST[i])
			f1[i][j]=max(f1[i][j],f1[i-1][j-COST[i]]+VALUE[i]);
		}
		
		drp(i,count1,0)
		{
			rep(j,0,1000)f2[i][j]=f2[i+1][j];
			drp(j,1000,COST[i])
				f2[i][j]=max(f2[i][j],f2[i+1][j-COST[i]]+VALUE[i]);
		}
	int q;
	read(q);
	while(q--)
	{
		int c,d;
		read(d);read(c);
		int l=0;
		while(bian[l+1]<d&&l<count1) ++l;
        int r=l;
        while(bian[r+1]<=d&&r<count1)++r;
        
        int ans=-2145445;
		for(int j=0;j<=c;j++)
			ans=max(ans,f1[l][j]+f2[r+1][c-j]);
			cout<<ans<<endl;
	}
	return 0;
}
后五组RE 另两组WA WHT

2020/8/28 18:09
加载中...