- c
0分?
- 2023-4-30 15:52:06 @
#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 条评论
-
楼治罕 LV 7 @ 2023-5-2 15:55:42
i,j都从0开始枚举
- 1
信息
- ID
- 470
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- (无)
- 递交数
- 107
- 已通过
- 11
- 上传者