-
题目来源:
-
题意分析:
XHD有个容量为v的口袋,有n个宝贝,每种宝贝的价值不一样,每种宝贝单位体积的价格也不一样,宝贝可以分割,分割后的价值和对应的体积成正比。求XHD最多能取回多少价值的宝贝? - 我的思路 一开始我没想明白,认为给的价值是一种宝贝的总价值,所以样例我都解释不了,想到给的价值是单位体积的价值,而不是总价值,就可以解释了,理解题意是很重要的,要不然下不去手啊Orz. 接下来就是贪心了,体积都是一样的,如果想要拿到价值最高的东西,那么每体积的价值都要尽可能高才行,所以策略就是每次取一体积价值最高的宝贝,直到放不下为止。 那么就是按照价值的大小从降序排列,最后输出答案。
- 完整代码:
#includetypedef struct{ int volume; //该种宝贝的总体积 int value; //单位体积的价值,不是总价值}goods;int main(void){ int v, n, i, j,ans, t; //口袋容量卡v,宝贝种类n,总价值ans,累计宝贝的体积t goods a[101], temp; while (scanf("%d", &v) && v != 0) { ans = 0, t = 0; scanf("%d",&n); //读入宝贝种类n for (i = 0; i < n; i++) scanf("%d%d",&a[i].value,&a[i].volume); for (i = 0; i < n - 1; i++) { for (j = 0; j < n - 1 - i; j++) { if (a[j].value < a[j + 1].value) { temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } } for (i = 0; i < n; i++) { if (v == t) break; for (j = 0; j < a[i].volume; j++) { if (v == t) break; else { ans += a[i].value; t++; } } } printf("%d\n",ans); } return 0;}