玄学 0pts->100pts
查看原帖
玄学 0pts->100pts
621883
MushR楼主2024/7/21 22:39

原来的代码(0pts)

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

typedef long long llong;

int f,v;
int a[103][103];
llong dp[103][103];
int pre[103][103];

void print(int n,int p){
    if(n==0)
        return;
    print(n-1,pre[n][p]);
    printf("%d ",p);
}

int main(){
    scanf("%d%d",&f,&v);
    for(int i=1;i<=f;i++){
        for(int j=1;j<=v;j++){
            scanf("%d",&a[i][j]);
        }
    }
    for(int i=1;i<=f;i++){
        for(int j=1;j<=v;j++){
            dp[i][j]=a[i][j];
            llong maxn=LLONG_MIN;/////////////
            int p=i-1;
            for(int q=1;q<j;q++){
                if(dp[p][q]>maxn){
                    maxn=dp[p][q];
                    pre[i][j]=q;
                }
            }
            if(i!=1)
                dp[i][j]+=maxn;
        }
    }
    llong ans=LLONG_MIN;
    int pos;
    for(int i=f;i<=v;i++){
        if(dp[f][i]>ans){
            ans=dp[f][i];
            pos=i;
        }
    }
    printf("%lld\n",ans);
    print(f,pos);
    return 0;
}

修改后的代码(100pts)

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

typedef long long llong;

int f,v;
int a[103][103];
llong dp[103][103];
int pre[103][103];

void print(int n,int p){
    if(n==0)
        return;
    print(n-1,pre[n][p]);
    printf("%d ",p);
}

int main(){
    scanf("%d%d",&f,&v);
    for(int i=1;i<=f;i++){
        for(int j=1;j<=v;j++){
            scanf("%d",&a[i][j]);
        }
    }
    for(int i=1;i<=f;i++){
        for(int j=1;j<=v;j++){
            dp[i][j]=a[i][j];
            llong maxn=INT_MIN;//////////
            int p=i-1;
            for(int q=1;q<j;q++){
                if(dp[p][q]>maxn){
                    maxn=dp[p][q];
                    pre[i][j]=q;
                }
            }
            if(i!=1)
                dp[i][j]+=maxn;
        }
    }
    llong ans=LLONG_MIN;
    int pos;
    for(int i=f;i<=v;i++){
        if(dp[f][i]>ans){
            ans=dp[f][i];
            pos=i;
        }
    }
    printf("%lld\n",ans);
    print(f,pos);
    return 0;
}

为什么把这个 LLONG_MIN 改成 INT_MIN 就对了?

这个是有什么地方溢出了吗?

2024/7/21 22:39
加载中...