贪心之后的01背包,与SDUT3903相似
#include <iostream>
#include <cstdio>
#include <string.h>
#include <algorithm>
using namespace std;
struct node{
int a,b;
}no[255];
int dp[255][255];
bool cmp(struct node x,struct node y){
return x.b < y.b;
}
int main(void){
int t;
scanf("%d",&t);
while(t--){
int n,m;
cin >> n >> m;
for(int i = 1; i <= n; i++){
cin >> no[i].a;
}
for(int i = 1; i <= n; i++){
cin >> no[i].b;
}
memset(dp,0,sizeof(dp));
sort(no + 1,no + n + 1,cmp);
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
dp[i][j] = max(dp[i - 1][j] , dp[i - 1][j - 1] + no[i].a + (j - 1) * no[i].b);
}
}
cout << dp[n][m] << endl;
}
return 0;
}