思路:
读完题立马想到的是多重背包,然后写了个模板上去 ac 了,后来发现可以按月饼单价贪心,貌似更简单。。。
AC 代码(dp):
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+5,INF = 0x3f3f3f3f;
// 好像用贪心跟简单
double dp[N];
int n,m;
double num[N],w[N];
int main() {
cin>>n>>m;
for(int i = 1; i <= n; i ++) {
cin>>num[i];
}
for(int i = 1; i <= n; i ++) {
cin>>w[i];
}
for(int i = 1; i <= n; i ++) {
for(int j = m; j >= 1; j --) {
for(int k = 1; k <= num[i] && k <= j; k ++) {
dp[j] = max(dp[j],dp[j - k] + (w[i] / num[i]) * k);
}
}
}
printf("%.2f",dp[m]);
return 0;
}