首先看一下题目!!!

主要思路:
状态及指标:f ( m , n ) , 遍历到第m个数,还剩钱的数量,值为乘积;
状态转移方程: f ( m , n ) = max { f ( m-1 , n ) , f ( m-1 , n+v[ m ] ) + w[ m ] * v[ m ] };
下面看代码:
#include <iostream>
#include <vector>
using namespace std;
int N, M;
int v[25], w[25];
int f[30000];
int main()
{
cin >> N >> M;
for (int m = 1; m <= M; m++) {
cin >> v[m] >> w[m];
w[m] *= v[m];
}
for (int m = 1; m <= M; m++) {
for (int n = N; n >= 1; n--) {
if (n >= v[m])f[n] = max(f[n], f[n - v[m]] + w[m]);
}
}
cout << f[N] << endl;
return 0;
}
顾yh
该博客探讨了一种使用动态规划解决购物优化问题的方法。通过状态转移方程f(m,n)=max{f(m-1,n),f(m-1,n+v[m])+w[m]*v[m]}
712

被折叠的 条评论
为什么被折叠?



