#include <bits/stdc++.h>
using namespace std;
int dp[101][1001];
int main() {
int n,m;cin>>n>>m;
map<int,int>mp;
for(int i=0;i<m;i++){
int x,y;cin>>x>>y;
mp[x]=y;
}
int c=0;
for(auto &i:mp){
if (i.first<=n){
c++;
for (int j = 1; j <= n; ++j) {
if (j<i.first)
dp[c][j]=dp[c-1][j];
else{
dp[c][j]= max(dp[c-1][j],i.second+dp[c-1][j-i.first]);
}
}
}
}
cout<<dp[c][n];
}
#include <bits/stdc++.h>
using namespace std;
int dp[101][1001];
int main() {
int n, m;
cin >> n >> m;
vector<array<int, 2>> mp(m + 1);
for (int i = 1; i <= m; i++)
cin >> mp[i][0] >> mp[i][1];
int c = 0;
for (int i = 1; i <= m; ++i)
if (mp[i][0] <= n) {
c++;
for (int j = 1; j <= n; ++j)
if (j < mp[i][0])
dp[c][j] = dp[c - 1][j];
else
dp[c][j] = max(dp[c - 1][j], dp[c - 1][j - mp[i][0]] + mp[i][1]);
}
cout << dp[c][n];
}
第一个代码只过了前三个测试点
第二个全过
但我看不出两个代码有什么区别,大佬们能指点我一下吗