HDOJ 题目2670 Girl Love Value(01背包)

Girl Love Value

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 748    Accepted Submission(s): 417

Problem Description

Love in college is a happy thing but always have so many pity boys or girls can not find it.

Now a chance is coming for lots of single boys. The Most beautiful and lovely and intelligent girl in HDU,named Kiki want to choose K single boys to travel Jolmo Lungma. You may ask one girls and K boys is not a interesting thing to K boys. But you may not
know Kiki have a lot of friends which all are beautiful girl!!!!. Now you must be sure how wonderful things it is if you be choose by Kiki.

Problem is coming, n single boys want to go to travel with Kiki. But Kiki only choose K from them. Kiki every day will choose one single boy, so after K days the choosing will be end. Each boys have a Love value (Li) to Kiki, and also have a other value (Bi),
if one boy can not be choose by Kiki his Love value will decrease Bi every day.

Kiki must choose K boys, so she want the total Love value maximum.

Input

The input contains multiple test cases.

First line give the integer n,K (1<=K<=n<=1000)

Second line give n integer Li (Li <= 100000).

Last line give n integer Bi.(Bi<=1000)

Output

Output only one integer about the maximum total Love value Kiki can get by choose K boys.

Sample Input

3 3
10 20 30
4 5 6
4 3
20 30 40 50
2 7 6 5

Sample Output

47
104

Author

yifenfei

Source

HDU女生专场公开赛——谁说女子不如男

Recommend

lcy   |   We have carefully selected several similar problems for you:  2668 2675 2671 2673 2672

题目大意:有n个男孩,每个男孩对那个女孩都有一个爱慕值li,一个递减值bi,当女孩不选他时他的爱慕之减去没选他的天数乘递减值,每天只能选一个男孩,问选m个获得最大的m值是多少

ac代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define max(a,b) (a>b?a:b)
struct s
{
	int li,bi;
}a[1010];
int dp[1010];
int cmp(const void *a,const void *b)
{
	return (*(struct s *)b).bi-(*(struct s *)a).bi;
}
int main()
{
	int n,m;
	while(scanf("%d%d",&n,&m)!=EOF)
	{
		int i,j;
		for(i=0;i<n;i++)
		{
			scanf("%d",&a[i].li);
		}
		for(i=0;i<n;i++)
		{
			scanf("%d",&a[i].bi);
		}
		qsort(a,n,sizeof(a[0]),cmp);
		memset(dp,0,sizeof(dp));
		for(i=0;i<n;i++)
		{
			for(j=m;j>=1;j--)
			{
				dp[j]=max(dp[j],dp[j-1]+a[i].li-(j-1)*a[i].bi);
			}
		}
		printf("%d\n",dp[m]);
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2025-01-01 23:59:41

HDOJ 题目2670 Girl Love Value(01背包)的相关文章

饭卡------HDOJ杭电2546(还是01背包!!!!!!)

Problem Description 电子科大本部食堂的饭卡有一种非常诡异的设计,即在购买之前推断剩余金额. 假设购买一个商品之前,卡上的剩余金额大于或等于5元,就一定能够购买成功(即使购买后卡上剩余金额为负),否则无法购买(即使金额足够).所以大家都希望尽量使卡上的剩余金额最少. 某天,食堂中有n种菜出售.每种菜可购买一次. 已知每种菜的价格以及卡上的剩余金额,问最少可使卡上的剩余金额为多少. Input 多组数据.对于每组数据: 第一行为正整数n.表示菜的数量.n<=1000. 第二行包含

hdoj 1864 最大报销额 【01背包】||【dfs】

最大报销额 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 17014    Accepted Submission(s): 4959 Problem Description 现有一笔经费可以报销一定额度的发票.允许报销的发票类型包括买图书(A类).文具(B类).差旅(C类),要求每张发票的总额不得超过1000元,每张发票上,单项物品的

01背包

这里就只放自己刷的题目了,毕竟是弱弱哒 HDU2546:饭卡 1 #include <algorithm> 2 #include <cstdio> 3 4 using namespace std; 5 6 int main() 7 { 8 int n,m; 9 while (~scanf("%d", &n), n) 10 { 11 int f[2013] = {0}, menu[2013] = {0}; 12 for (int i = 1; i <

动态规划-01背包

先认错,学长们很早之前就讲过了,然而我现在才来写... 01背包 01背包是在M件物品取出若干件放在空间为W的背包里,每件物品的体积为W1,W2--Wn,与之相对应的价值为P1,P2--Pn. 01背包题目的雏形是: 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 从这个题目中可以看出,01背包的特点就是:每种物品仅有一件,可以选择放或不放. 其状态转移方程是: f[i][v]=max{f[i-1][v],f[i-1][v-c

C语言 &#183; 01背包

最近老碰到DP问题,没整过,在网上有不少资料,转载此篇自:http://blog.csdn.net/libin56842/article/details/9338841 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 从这个题目中可以看出,01背包的特点就是:每种物品仅有一件,可以选择放或不放. 其状态转移方程是: f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]} 对于这方方程其实并不难理解

uva10130 - SuperSale(01背包)

题目:uva10130 - SuperSale(01背包) 题目大意:超市甩卖.有n件商品,每件商品有对应的价值和重量.有一个家族准备去超市买东西,每个人最多每种甩卖商品只能买一件,可以拿很多不同的商品但是要能拿得动.给出每个人能拿得动的最大重量,问这样的一个家族取采购能够得到的最大的价值. 解题思路:01背包. dp[j] = Max (dp[j], dp[j - W] + P):W是商品的重量,P是商品的价值. 代码: #include <cstdio> #include <cstr

01背包//简直要被这道题玩死(掀桌)

先上链接: 表格什么的最清楚了:http://blog.csdn.net/mu399/article/details/7722810 dd大大的背包九讲: —————————————————— 01背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Wi]+Pi( j >= Wi ),  f[i-1,j] } f[i,j]表示在前i件物品中选择若干件放在承重为 j 的背包中,可以取得的最大价值. Pi表示第i件物品的价值. 决策:为了背包中物品总价值最大化,第 i件物品应该放入背包中

51 Nod 1007 正整数分组【类01背包】

1007 正整数分组 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的. Input 第1行:一个数N,N为正整数的数量. 第2 - N+1行,N个正整数. (N <= 100, 所有正整数的和 <= 10000) Output 输出这个最小差 Input示例 5 1 2 3 4 5 Output示例 1 题目链接

hdoj 1203 I NEED A OFFER! 【另类01背包】【概率背包】

题意:... 策略:动态规划. 因为是求至少能得到一个offer的概率,那我们可以反着求,求得不到一个offer的概率,最后用1减去就好了. 代码: #include<string.h> #include<stdio.h> double dp[10010]; struct node{ int a; double b; }s[10010]; int main() { int n, m, i, j; while(scanf("%d%d", &n, &