题目:
码风极差\kk
#include <bits/stdc++.h>
using namespace std;
long long f[10010],T,info[100][100],n,m,w,v; //info[i][j]重量i,价值j的出现次数
int main() {
cin >> T;
while (T--) {
memset(f,0,sizeof(f));
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>v>>w,info[w][v]++;
for (int i=1,j=1;i<=10;j++,i+=j/10,j%=10){
int s=info[i][j];
if(j==0)continue;
//cout<<i<<' '<<j<<'\n';
for (int k=1;s>0;s-=k,k*=2){
if(k>s)k=s;
int w = k*i,v=k*j;
for (int j=m;j>=w;j--){
f[j]=max(f[j],f[j-w]+v);
}
}
}
// for(int i=1;i<=m;i++)cout<<f[i]<<' ';
cout <<f[m]<<'\n';
}
return 0;
}