您的位置:首页 > 其它

【HDOJ】2602 Bone Collector

2014-05-04 14:33 211 查看
DP。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct {
int val, vol;
} bone_st;

bone_st bones[1005];
int dp[1005];

int comp(const void *a, const void *b) {
bone_st *p = (bone_st *)a;
bone_st *q = (bone_st *)b;
if (p->vol == q->vol)
return q->val - p->val;
else
return p->vol - q->vol;
}

int main() {
int case_n, n, v;
int i, j, k;

scanf("%d", &case_n);

while (case_n--) {
scanf("%d %d", &n, &v);
for (i=0; i<n; ++i)
scanf("%d", &bones[i].val);
for (i=0; i<n; ++i)
scanf("%d", &bones[i].vol);

qsort(bones, n, sizeof(bone_st), comp);
memset(dp, 0, sizeof(dp));

for (i=0; i<n; ++i) {
if (bones[i].vol > v)
break;
k = bones[i].val;
for (j=v; j>=bones[i].vol; --j) {
if (k+dp[j-bones[i].vol] > dp[j])
dp[j] = k + dp[j-bones[i].vol];
}
}
printf("%d\n", dp[v]);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: