文章

85

粉丝

0

获赞

516

访问

10.7k

头像
Buyer 题解:动态规划(难啊难)
P1567
发布于2026年3月8日 20:27
阅读数 213

#include <bits/stdc++.h>
using namespace std;

int dp[1005][105];
int mselect[1005][105];
int val[1005];
int money[1005];
int main() {
    int m,n;
    while (cin>>m>>n) {
        for (int i=1;i<=n;i++) {
            cin>>money[i];
            cin>>val[i];
        }
        memset(mselect,0,sizeof(mselect));
        memset(mselect,0,sizeof(dp));
        for (int i=1;i<=n;i++) {
            for (int j=0;j<=m;j++) {
                if (j>=money[i]) {
                    dp[i][j] = max(dp[i-1][j],dp[i-1][j-money[i]]+val[i]);
                    if (dp[i-1][j]<dp[i-1][j-money[i]]+val[i]) {
                        mselect[i][j]=1;
                    }
                }
                else {
                    dp[i][j] = dp[i-1][j];
                }
            }
        }
        if (dp[n][m]==0) {
            cout<<"0"<<endl;
            continue;
        }
        vector<int> ans;
   ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发