看了题解好像没有人用dp分组背包,那我发个吧
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
struct bag{
double c,k;
}p[1005];
int main(){
double n,dp[1005];
int m;
memset(dp,0,sizeof(dp));
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>p[i].c;
}
for(int i=1;i<=n;i++){
cin>>p[i].k;
}
for(int i=1;i<=n;i++){
for(int j=m;j>=1;j--){
for(int k=j;k>=0;k--){
double x=min(1.0,k/p[i].k)*100.0;
dp[j]=max(dp[j],dp[j-k]+x*p[i].c);
}
}
}
printf("%.4lf",dp[m]);
return 0;
}