#include<iostream> using namespace std; #include <algorithm> int w[5] = { 0 , 2 , 3 , 4 , 5 }; //商品的体积2、3、4、5 int v[5] = { 0 , 3 , 4 , 5 , 6 }; //商品的价值3、4、5、6 int bagV = 8; //背包大小 int dp[5][9] = { { 0 } }; //动态规划表 int item[5]; //最优解情况 void findMax() { //动态规划 for (int i = 1; i <= 4; i++) { for (int j = 1; j <= bagV; j++) { if (j < w[i]) dp[i][j] = dp[i - 1][j]; else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w[i]] + v[i]); } } } void findWhat(int i, int j) { //最优解情况 if (i >= 0) { if (dp[i][j] == dp[i - 1][j]) { item[i] = 0; findWhat(i - 1, j); } else if (j - w[i] >= 0 && dp[i][j] == dp[i - 1][j - w[i]] + v[i]) { item[i] = 1; findWhat(i - 1, j - w[i]); } } } void print() { for (int i = 0; i < 5; i++) { //动态规划表输出 for (int j = 0; j < 9; j++) { cout << dp[i][j] << ' '; } cout << endl; } cout << endl; for (int i = 0; i < 5; i++) //最优解输出 cout << item[i] << ' '; cout << endl; } int main() { findMax(); findWhat(4, 8); print(); return 0; }改成c语言
时间: 2024-03-14 20:43:34 浏览: 68
把代码中的iostream头文件改成stdio.h,把using namespace std去掉,把max函数改成三目运算符,把数组初始化中的大括号改成逗号分隔的形式,把动态规划表和最优解情况的输出语句改成使用printf函数输出。
改写后的代码如下:
```c
#include <stdio.h>
#define max(a, b) ((a) > (b) ? (a) : (b))
int w[5] = {0, 2, 3, 4, 5};
int v[5] = {0, 3, 4, 5, 6};
int bagV = 8;
int dp[5][9] = {{0}};
int item[5];
void findMax()
{
for (int i = 1; i <= 4; i++)
{
for (int j = 1; j <= bagV; j++)
{
if (j < w[i])
dp[i][j] = dp[i - 1][j];
else
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w[i]] + v[i]);
}
}
}
void findWhat(int i, int j)
{
if (i >= 0)
{
if (dp[i][j] == dp[i - 1][j])
{
item[i] = 0;
findWhat(i - 1, j);
}
else if (j - w[i] >= 0 && dp[i][j] == dp[i - 1][j - w[i]] + v[i])
{
item[i] = 1;
findWhat(i - 1, j - w[i]);
}
}
}
void print()
{
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 9; j++)
{
printf("%d ", dp[i][j]);
}
printf("\n");
}
printf("\n");
for (int i = 0; i < 5; i++)
printf("%d ", item[i]);
printf("\n");
}
int main()
{
findMax();
findWhat(4, 8);
print();
return 0;
}
```
阅读全文