3. AI作曲.py

啊啊啊,真没招了,有AC代码(题解)对照着也瞪不出问题

MY CODE

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll dp[105][55], ms[55][55], a[105];
int main(){
    ll t;
    cin >> t;
    while(t--){
        ll n, m;
        cin >> n >> m;
        for(ll i=0;i<m;i++){
            for(ll j=0;j<m;j++){
                cin >> ms[i][j];
            }
        }
        for(ll i=0;i<n;i++){
            cin >> a[i];
        }
        memset(dp, 0, sizeof(dp));
        for(ll i=1;i<n;i++){
            if(a[i]>0&&a[i-1]>0){
                    dp[i][a[i]]=dp[i-1][a[i-1]]+ms[a[i-1]][a[i]];
            }
            else if(a[i]>0&&a[i-1]<0){
                for(ll k=0;k<m;k++)
                    dp[i][a[i]]=max(dp[i][a[i]],dp[i-1][k]+ms[k][a[i]]);
                
            }
            else if(a[i]<0&&a[i-1]>0){
               for(ll j=0;j<m;j++)
                    dp[i][j]=max(dp[i][j],dp[i-1][a[i-1]]+ms[a[i-1]][j]);
            }
            else{
               for(ll j=0;j<m;j++)
                    for(ll k=0;k<m;k++)
                        dp[i][j]=max(dp[i][j],dp[i-1][k]+ms[k][j]);
            }
        }
        ll ans=0;
        for(ll i=0;i<m;i++){
            ans=max(ans, dp[n-1][i]);
        }
        cout << ans << endl;
    }
}

AC CODE

image
image
image

@冯俊骁

@李予劼

数组开小了,而且是else if不是else,可能等于0时是不用操作的

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll dp[105][105], ms[105][105], a[105];
int main(){
    ll t;
    cin >> t;
    while(t--){
        ll n, m;
        cin >> n >> m;
        for(ll i=0;i<m;i++){
            for(ll j=0;j<m;j++){
                cin >> ms[i][j];
            }
        }
        for(ll i=0;i<n;i++){
            cin >> a[i];
        }
        memset(dp, 0, sizeof(dp));
        for(ll i=1;i<n;i++){
            if(a[i]>0&&a[i-1]>0){
                    dp[i][a[i]]=dp[i-1][a[i-1]]+ms[a[i-1]][a[i]];
            }
            else if(a[i]>0&&a[i-1]<0){
                for(ll k=0;k<m;k++)
                    dp[i][a[i]]=max(dp[i][a[i]],dp[i-1][k]+ms[k][a[i]]);
                
            }
            else if(a[i]<0&&a[i-1]<0){
               for(ll j=0;j<m;j++)
                    for(ll k=0;k<m;k++)
                        dp[i][j]=max(dp[i][j],dp[i-1][k]+ms[k][j]);
            }
            else if(a[i]<0&&a[i-1]>0){
                 for(ll j=0;j<m;j++)
                    dp[i][j]=max(dp[i][j],dp[i-1][a[i-1]]+ms[a[i-1]][j]);
            }
        }
        ll ans=0;
        for(ll i=0;i<m;i++){
            ans=max(ans, dp[n-1][i]);
        }
        cout << ans << endl;
    }
}

最新代码

阳历还是美国

样例

2
5 3
83 86 77
15 93 35
86 92 49
3 3 3 1 2
10 5
36 11 68 67 29
82 30 62 23 67
35 29 2 22 58
69 67 93 56 11
42 29 73 21 19
-1 -1 5 -1 4 -1 -1 -1 4 -1
270
625

有人吗!!???!!???

有。。。。。。人。。。。。。吗。。。。。。。

有没有可能标程错了

我不到啊,

这老师给的代码

啊啊啊,995,9999999999999555555

不开long long呢?

@HIM @ray_cmr

没事我来了e

@HIM 我问你这不是题解传送门吗?
局部截取_20250713_082727

你自己对着题解看一看哪里错了

你为啥不进去看一眼