题目描述
老王是一个老实巴交的农民,听说现在猪肉涨价很厉害,老王就修建了一个猪圈,养了 n 头猪(n<=1000),每天老王最多可以杀一头猪卖钱,获得的收益就是猪的体重。由于饲料价格上涨,每天给猪吃得越来越少,因此每过一天每头猪的体重都会下降 p [i](当然,如果猪体重≤0 了,自然获利就是 0),问 k 天内老王的获得的最大收益是多少。
输入描述
第一行两个用一个空格分开的整数 n 和 k,分别表示猪的数目和天数
第二行 n 个用一个空格分开的整数,表示猪的初始重量 a [i](<=1000);
第三行 n 个用一个空格分开的整数,表示每过一天每头猪的体重下降 p [i]。
输出描述
一行一个数,表示获得的最大收益。
样例输入
2 2
10 10
1 2
样例输出
19
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct L{
int a,p;
}r[1005];
int cmp(L A,L B){return A.p!=B.p?A.p>B.p:A.a>B.a;}
int dp[1005];
int main(){
int n,k;
while(~scanf("%d%d",&n,&k)){
for(int i=1;i<=n;i++)scanf("%d",&r[i].a);
for(int i=1;i<=n;i++)scanf("%d",&r[i].p);
sort(r+1,r+n+1,cmp);
memset(dp,0,sizeof(dp));
int ans=0;
for(int i=1;i<=n;i++){
for(int j=k;j;j--){
int add=r[i].a-r[i].p*(j-1);
if(add<0)add=0;
dp[j]=max(dp[j],dp[j-1]+add); ans=max(ans,dp[j]);
}
}
printf("%d\n",ans);
}
return 0;
}