#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 1e5 * 1.5;
int t[105], v[105], dp[1005], dp1[1005][1005];
int main()
{
/*以下为一维dp,j的遍历只能倒序*/
int T, M;
cin >> T >> M;
for (int i = 1; i <= M; i++)
{
cin >> t[i] >> v[i];
}
for (int i = 1; i <= M; i++)
{
for (int j = T; j >= 0; j--)
{
if (j - t[i] >= 0)
{
dp[j] = max(dp[j], dp[j - t[i]] + v[i]);
}
}
}
cout << dp[T];
/*以下是二维dp, 其中j的遍历可正序和倒序*/
for (int i = 1; i <= M; i++)
{
for (int j = T; j >= 0; j--)
{
if (j - t[i] >= 0)
{
dp1[i][j] = max(dp1[i - 1][j], dp1[i - 1][j - t[i]] + v[i]);
}
else
{
dp1[i][j] = dp1[i - 1][j];
}
}
}
cout << dp1[M][T];
return 0;
}
01背包框架
最新推荐文章于 2024-09-28 22:05:59 发布