#include<bits/stdc++.h>
using namespace std;
int r(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
int n,m,w,c,dp[6010109],cou[21][21],x[311111],y[311111],ccc;
int main(){
	n=r(),m=r();
	for(int i=1;i<=n;i++){
		w=r(),c=r();++cou[w][c];
	}
	for(int i=1;i<=20;++i)for(int j=1;j<=20;++j){
		int k=1;
		while(cou[i][j]>=k){
			x[++ccc]=i*k;y[ccc]=j*k;
			cou[i][j]-=k;k*=2;
		}
		if(cou[i][j])x[++ccc]=cou[i][j]*i,y[ccc]=cou[i][j]*j;
	}
	for(int i=1;i<=ccc;++i)for(int j=m;j>=x[i];--j)
	dp[j]=max(dp[j],dp[j-x[i]]+y[i]);
	cout<<dp[m];
}

1 条评论

  • 1

信息

ID
470
时间
1000ms
内存
256MiB
难度
9
标签
(无)
递交数
107
已通过
11
上传者