0-1背包的动态规划
#include<iostream>
using namespace std;
int w[50], v[50], dp[50][50];
int knapsack(int n, int c)
{
for (int i = 0; i <= n; i++)
{
dp[i][0] = 0;
}
for (int j = 0; j <= c; j++)
{
dp[0][j] = 0;
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= c; 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]);
}
}
}
return dp[n][c];
}
int main()
{
int n, c;
cout << "请输入物品数量和背包容量";
cin >> n >> c;
cout << "请输入每个物品的重量和价值";
for (int i = 1; i <= n; i++)
{
cin >> w[i] >> v[i];
}
cout<<knapsack(n, c);
}
最长单调递增子序列
#include<iostream>
using namespace std;
// 定义一个函数来计算最长不下降子序列的长度
int longestNonDecreasingSubsequence(int a[], int n) {
int b[100] = { 0 };
int i, j;
int maxLength = 0;
for (i = 2; i <= n; i++) {
int k = 0;
for (j = 1; j < i; j++)
if (a[j] <= a[i] && k < b[j])
k = b[j];
b[i] = k + 1;
if (maxLength < b[i])
maxLength = b[i];
}
return maxLength;
}
int main() {
int a[100];
int n;
cout << "请输入序列的长度: ";
cin >> n;
cout << "请输入序列的元素: ";
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
int result = longestNonDecreasingSubsequence(a, n);
cout << "最长不下降子序列的长度是: " << result << endl;
return 0;
}