题意:输入n,k,n代表n个男生,接下来一行输入n个数,li代表女生选这个男生时的幸福指数,在输入一行表示每晚一天选这个男生这个男生的幸福指数就减少bi,问如何选取k个男生使得幸福度最大,一天只能选一个男生。
思路:贪心不行,涉及到两个变量,而且这两个变量找不到关系来使用贪心;
然后每个人只有选或不选两种状态,这不就是01背包,k表示背包容量。
先对数据按bi降序排列(贪心的思想,先选bi大的)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct node
{
int l,b;
};
node no[1010];
bool cmp(node aa,node bb)
{
return aa.b>bb.b;
}
int main()
{
int n,k,i,j;
int dp[1010];
while(~scanf("%d%d",&n,&k))
{
for(i=1;i<=n;i++)
scanf("%d",&no[i].l);
for(i=1;i<=n;i++)
scanf("%d",&no[i].b);
sort(no+1,no+1+n,cmp);
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
{
for(j=k;j>=1;j--)
{
dp[j]=max(dp[j],dp[j-1]+no[i].l-no[i].b*(j-1));
}
}
printf("%d\n",dp[k]);
}
}
//人一我百,人百我万
//时间