为什么会超内存

回复帖子

@Portland 2018-09-08 17:39 回复
#include<iostream>
using namespace std;

int n,m;
struct aThs{
    int h,p;
}a[3403];
int dp[3403][12881]={0};

int main(){
    int i,j;
    cin>>n>>m;
    for(i=1;i<=n;i++){
        cin>>a[i].h>>a[i].p;
    }
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            //cout<<i<<","<<j<<":";
            if(a[i].h>j){
                dp[i][j]=dp[i-1][j];
                continue;
            }

            if((dp[i-1][j-a[i].h]+a[i].p) > (dp[i-1][j])){
                //cout<<"pick";
                dp[i][j]=dp[i-1][j-a[i].h]+a[i].p;
            }
            else{
                //cout<<"don't pick";
                dp[i][j]=dp[i-1][j];
            }
            //cout<<endl;
        }
    }
    cout<<dp[n][m]<<endl;
    return 0;
}
@Portland 2018-09-08 18:01 回复 举报
#include<iostream>
#include<algorithm>
using namespace std;

int n,m;
struct aThs{
    int h,p;
}a[3403];
int dp[12881]={0};

int main(){
    int i,j;
    cin>>n>>m;
    for(i=1;i<=n;i++){
        cin>>a[i].h>>a[i].p;
    }
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            //cout<<i<<","<<j<<":";
            if(a[i].h>j){
                continue;
            }
            dp[j]=max(dp[j] , dp[j-a[i].h]+a[i].p);
            //cout<<"dp "<<j<<" = "<<dp[j]<<endl;
            //cout<<endl;
        }
    }
    cout<<dp[m]<<endl;
    return 0;
}

这个。。。你的这个是每样东西无限供应时才能用。。。QAQ

反馈
如果你认为某个帖子有问题,欢迎向洛谷反馈,以帮助更多的同学。



请具体说明理由,以增加反馈的可信度。