数据太水了,我亻为做法都过了:
#include<bits/stdc++.h>
using namespace std;
struct node{
double score;
double cost;
}a[300];
bool cmp(node x,node y){
return x.score/x.cost>y.score/y.cost;
}
int dp[1000005];
int main(){
int n;
double m;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i].cost>>a[i].score;
a[i].score*=1000.0;
}
sort(a+1,a+n+1,cmp);
double mx_sc=0,mx_co=1;
for(int i=1;i<=n;i++){
for(int j=1000000;j>=a[i].cost;j--){
if(dp[j-(int)a[i].cost]||j==a[i].cost){
dp[j]=max(dp[j],dp[j-(int)a[i].cost]+(int)a[i].score);
if((double)dp[j]/(double)j>mx_sc/mx_co&&j>=m){
mx_sc=dp[j];
mx_co=j;
}
}
}
}
printf("%.0lf",floor(mx_sc/mx_co));
}
如果所有的 Wi 都为 1e6 ,那么卡一下我代码就挂了