求助
查看原帖
求助
689314
xukela楼主2022/4/15 01:41
#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];
}

第一个代码只过了前三个测试点

第二个全过

但我看不出两个代码有什么区别,大佬们能指点我一下吗

2022/4/15 01:41
加载中...