可以给我一份用C++写的动态规划的代码吗
时间: 2024-04-30 21:23:16 浏览: 51
当然可以,以下是一个简单的用C语言实现的动态规划代码示例:
```
#include <stdio.h>
int max(int a, int b) {
return a > b ? a : b;
}
int knapsack(int capacity, int weights[], int values[], int n) {
int dp[n+1][capacity+1];
for (int i = 0; i <= n; i++) {
for (int w = 0; w <= capacity; w++) {
if (i == 0 || w == 0) {
dp[i][w] = 0;
} else if (weights[i-1] <= w) {
dp[i][w] = max(values[i-1] + dp[i-1][w-weights[i-1]], dp[i-1][w]);
} else {
dp[i][w] = dp[i-1][w];
}
}
}
return dp[n][capacity];
}
int main() {
int capacity = 50;
int weights[] = {10, 20, 30};
int values[] = {60, 100, 120};
int n = sizeof(values)/sizeof(values[0]);
printf("Maximum value: %d\n", knapsack(capacity, weights, values, n));
return 0;
}
```
这个示例是一个背包问题的解决方案,使用了二维数组dp[i][w]来存储i个物品在w容量下所获得的最大价值。在每次迭代中,我们检查当前物品是否可以装入背包,如果可以,我们就比较装入当前物品和不装入当前物品两种情况下的最大价值,并更新dp数组。最后返回dp[n][capacity]即可。
阅读全文