比赛 |
202103省实验桐柏一中普及组联赛 |
评测结果 |
AAAWWWWWWW |
题目名称 |
自助者天助 |
最终得分 |
30 |
用户昵称 |
云浅QwQ |
运行时间 |
0.208 s |
代码语言 |
C++ |
内存使用 |
8.17 MiB |
提交时间 |
2021-03-22 18:14:29 |
显示代码纯文本
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<map>
#define int long long
using namespace std;
struct Node{
int w,v;
}dat[30005];
int n,m;
int mp[1005][1005];
int id[105];
int cnt=0;
int a[105],b[105],c[105];
int num=0;
int w[105],v[105];
int f[30005];
signed main(void){
freopen("delicious.in","r",stdin);
freopen("delicious.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>dat[i].w>>dat[i].v;
if(!mp[dat[i].w][dat[i].v])id[++cnt]=i,mp[dat[i].w][dat[i].v]=1;
else mp[dat[i].w][dat[i].v]++;
}
for(int i=1;i<=cnt;i++){
a[i]=dat[id[i]].w;
b[i]=dat[id[i]].v;
c[i]=mp[dat[id[i]].w][dat[id[i]].v];
}
n=cnt;
for(int i=1;i<=n;i++){
for(int j=1;j<=c[i];j*=2){
v[++num]=j*b[i];
w[num]=j*a[i];
c[i]-=j;
}
if(c[i]!=0){
v[++num]=b[i]*c[i];
w[num]=a[i]*c[i];
}
}
for(int i=1;i<=num;++i){
for(int j=m;j>=w[i];--j){
f[j]=max(f[j],f[j-w[i]]+v[i]);
}
}
cout<<f[m]<<endl;
return 0;
}