测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A25985. 最佳策略

填空题 较易

题目描述

最佳策略

题目描述

有一辆最大载重为15吨的货车。现一共有五件货品,重量分别是W1,W2,W3,W4,W5,价值分别是V1,V2,V3,V4,V5。现希望货车中装入的货物总价值越大越好。请你编写程序,帮助计算,在不超载的情况下,货车能够运输的货品最大总价值是多少?

例如,5件货品的重量和价值如下表所示:

输入描述

第一行输入5个正整数,数字之间以一个空格分隔,表示货品的重量。

第二行输入5个正整数,数字之间以一个空格分隔,表示货品的价值。

输出描述

计算能够运输的货品最大总价值,并输出。

样例输入

3 4 6 6 5
1000 500 400 1200 300

样例输出

2700

参考答案

#include <bits/stdc++.h> using namespace std; int s1[5001][51]; int a[5][2], ans = 0; void dfs(int x, int jz, int w) { int i; if (w > 15) return; if (x == 5) { if (ans < jz) ans = jz; return; } dfs(x + 1, jz + a[x][1], w + a[x][0]); dfs(x + 1, jz, w); } int main() { // freopen("0.in","r",stdin); // freopen("0.out","w",stdout); int i; for (i = 0; i < 5; i++) scanf("%d", &a[i][0]); for (i = 0; i < 5; i++) scanf("%d", &a[i][1]); dfs(0, 0, 0); printf("%d", ans); // fclose(stdin); // fclose(stdout); return 0; }

答案解析

// 参考代码2

#include <cstdio>

#include <iostream>


using namespace std;

int w[8], v[8];

int f[58];

int main() {

 for (int i = 1; i <= 5; i++) {

scanf("%d", &w[i]);

 }

 for (int i = 1; i <= 5; i++) {

scanf("%d", &v[i]);

 }

 for (int i = 1; i <= 5; i++) {

   for (int j = 15; j >= w[i]; j--) {

     f[j] = max(f[j], f[j - w[i]] + v[i]);

   }

 }

 printf("%d", f[15]);

 return 0;

}

上一题 下一题