现在的位置: 首页 > 综合 > 正文

hdu 2670

2019年01月01日 ⁄ 综合 ⁄ 共 552字 ⁄ 字号 评论关闭

如果确定了选哪几个,顺序肯定是Li大的先选,所以可以按Li排序,再像0-1背包一样依次添加

 

 

 

 

 

 

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int dp[1001];
struct op
{
	int w,v;
}p[1001];
int cmp(const void *a,const void *b)
{
	struct op *c,*d;
	c=(struct op *)a;
	d=(struct op *)b;
	return d->v-c->v;
}
int main()
{
	int i,j,n,k,max;
	while(scanf("%d%d",&n,&k)!=-1)
	{
		memset(dp,0,sizeof(dp));
		for(i=0;i<n;i++)
			scanf("%d",&p[i].w);
		for(i=0;i<n;i++)
			scanf("%d",&p[i].v);
		qsort(p,n,sizeof(p[0]),cmp);
		for(i=0;i<n;i++)
			for(j=k;j>=1;j--)
			{
				if(dp[j]<dp[j-1]+p[i].w-(j-1)*p[i].v)
				dp[j]=dp[j-1]+p[i].w-(j-1)*p[i].v;
			}
			printf("%d\n",dp[k]);
	}
	return 0;
}

 

抱歉!评论已关闭.