过了,但问
查看原帖
过了,但问
1418436
xuzimeng楼主2025/8/31 11:53

以下代码理论上最坏时间复杂度是 O(TNM2)O(TNM^2),应该是过不了的,但过了,而且最慢的点也才81ms,求大佬证明其正确性/hack

#include<bits/stdc++.h>
using namespace std;
int main(){
    int t,n,m,p[105][105];
    cin>>t>>n>>m;
    for (int i=1;i<=t;i++)
        for (int j=1;j<=n;j++)
            cin>>p[i][j];
    for (int i=1;i<t;i++){
        int dp[10005]={0};
        for (int j=1;j<=n;j++){
            if (p[i+1][j]>p[i][j]){//我觉得和传统低级的多重背包区别在这,加之前是90pts
                for (int k=0;k<=m;k++){
                    for (int x=0;x*p[i][j]<=k;x++){
                        dp[k]=max(dp[k],dp[k-x*p[i][j]]+x*p[i+1][j]-x*p[i][j]);
                    }
                }
            }
        }
        m+=dp[m];
    }
    cout<<m<<endl;
    return 0;
}
2025/8/31 11:53
加载中...