hdu 2670

来源:互联网 发布:java数据库连接代码 编辑:程序博客网 时间:2024/06/14 12:53

如果确定了选哪几个,顺序肯定是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;}