1 条题解

  • 1
    @ 2026-2-26 8:38:41

    二维

    #include<bits/stdc++.h>
    using namespace std;
    const int N=51000,M=30;
    int n,m;
    long long p[M],v[M];
    long long dp[M][N];
    int main(){
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=m;i++){
    		scanf("%lld%lld",&v[i],&p[i]);
    		p[i]*=v[i];
    	}
    	for(int i=1;i<=m;i++){
    		for(int j=0;j<=n;j++){
    			dp[i][j]=dp[i-1][j];
    			if(j>=v[i])
    				dp[i][j]=max(dp[i-1][j-v[i]]+p[i],dp[i][j]);
    		}
    	}
    	printf("%lld\n",dp[m][n]);
    	return 0;
    }
    

    一维(滚动优化)

    #include<bits/stdc++.h>
    using namespace std;
    const int N=51000,M=30;
    int n,m;
    long long p[M],v[M];
    long long dp[N];
    int main(){
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=m;i++){
    		scanf("%lld%lld",&v[i],&p[i]);
    		p[i]*=v[i];
    	}
    	for(int i=1;i<=m;i++){//遍历物品
    		for(int j=n;j>=v[i];j--){//遍历预算
    			dp[j]=max(dp[j-v[i]]+p[i],dp[j]);
    		}
    	}
    	printf("%lld\n",dp[n]);
    	return 0;
    }
    
    • 1

    E08_3 [NOIP 2006 普及组] 开心的金明

    信息

    ID
    121
    时间
    1000ms
    内存
    128MiB
    难度
    7
    标签
    递交数
    176
    已通过
    42
    上传者