第二次把背包当成贪心来做........不说什么了...........
#include <bits/stdc++.h>
using namespace std;
int dp[110][1010];
int main() {
int n, x, t, k;
while(~scanf("%d%d%d%d", &n, &x, &t, &k) && (n || x || t || k)) {
memset(dp, -1, sizeof(dp));
dp[0][0] = 0;
int V = (n + 1) << 1, M = (n + 1) * x * 91 / 100 - (n + 1) * t, maxx = 0;
for(int i = 0; i < k; i++) {
int p, sum = 0;
scanf("%d", &p);
for(int j = 0; j < n + 1; j++) {
int temp;
scanf("%d", &temp);
sum += temp;
}
for(int k = 0; k < 2; k++) {
for(int i = V; i >= 1; i--) {
for(int j = M; j >= p; j--) {
if(dp[i - 1][j - p] >= 0) dp[i][j] = max(dp[i][j], dp[i - 1][j - p] + sum);
if(dp[i][j] > maxx) {
maxx = dp[i][j];
}
}
}
}
}
printf("%.2lf\n", (double)maxx / (n + 1));
}
return 0;
}
Problem B: Let's Yum Cha! |