刚刚比赛的题目
  • 板块题目总版
  • 楼主xuzimeng
  • 当前回复5
  • 已保存回复5
  • 发布时间2025/7/29 16:35
  • 上次更新2025/7/29 21:20:55
查看原帖
刚刚比赛的题目
1418436
xuzimeng楼主2025/7/29 16:35

link

应该是对于ppair的处理不当,但不知道怎么改

#include<bits/stdc++.h>
using namespace std;
int main(){
    bool a[2005],b[2005];
    int n,p1,p3,p5,pp;
    cin>>n;
    string at,bt;
    cin>>at>>bt>>p1>>p3>>p5>>pp;
    for (int i=0;i<n;i++){
        a[i]=at[i]-'0';
        b[i]=bt[i]-'0';
    }
    int ans[2005][2005]={0};
    for (int i=1;i<=n;i++){
        int j=0;
        ans[i][j]=INT_MAX;
        if (a[i-1]==0)
            ans[i][j]=ans[i-1][j];
        if (i>=5)
            ans[i][j]=min(ans[i][j],ans[i-5][j]+p5);
        else
            ans[i][j]=min(ans[i][j],p5);
        if (i>=3)
            ans[i][j]=min(ans[i][j],ans[i-3][j]+p3);
        else
            ans[i][j]=min(ans[i][j],p3);
        if (i>=4)
            ans[i][j]=min(ans[i][j],ans[i-4][j]+pp);
        else
            ans[i][j]=min(ans[i][j],pp);
        ans[i][j]=min(ans[i][j],ans[i-1][j]+p1);
    }
    for (int j=1;j<=n;j++){
        int i=0;
        ans[i][j]=INT_MAX;
        if (b[j-1]==0)
            ans[i][j]=ans[i][j-1];
        if (j>=5)
            ans[i][j]=min(ans[i][j],ans[i][j-5]+p5);
        else
            ans[i][j]=min(ans[i][j],p5);
        if (j>=3)
            ans[i][j]=min(ans[i][j],ans[i][j-3]+p3);
        else
            ans[i][j]=min(ans[i][j],p3);
        if (j>=4)
            ans[i][j]=min(ans[i][j],ans[i][j-4]+pp);
        else
            ans[i][j]=min(ans[i][j],pp);
        ans[i][j]=min(ans[i][j],ans[i][j-1]+p1);
    }
    for (int i=1;i<=n;i++){
        for (int j=1;j<=n;j++){
            ans[i][j]=INT_MAX;
            if (a[i-1]==0&&b[j-1]==0)
                ans[i][j]=ans[i-1][j-1];
            else if (a[i-1]==0)
                ans[i][j]=ans[i-1][j];
            else if (b[j-1]==0)
                ans[i][j]=ans[i][j-1];
            if (i>=5)
                ans[i][j]=min(ans[i][j],ans[i-5][j]+p5);
            else
                ans[i][j]=min(ans[i][j],ans[0][j]+p5);
            if (i>=3)
                ans[i][j]=min(ans[i][j],ans[i-3][j]+p3);
            else
                ans[i][j]=min(ans[i][j],ans[0][j]+p3);
            
            if (j>=5)
                ans[i][j]=min(ans[i][j],ans[i][j-5]+p5);
            else
                ans[i][j]=min(ans[i][j],ans[i][0]+p5);
            if (j>=3)
                ans[i][j]=min(ans[i][j],ans[i][j-3]+p3);
            else
                ans[i][j]=min(ans[i][j],ans[i][0]+p3);
            if (i>=4&&j>=4)
                ans[i][j]=min(ans[i][j],ans[i-4][j-4]+pp);
            else if (i<4&&j<4)
                ans[i][j]=min(ans[i][j],pp);
            else if (i<4)
                ans[i][j]=min(ans[i][j],ans[0][j-4]+pp);
            else
                ans[i][j]=min(ans[i][j],ans[i-4][0]+pp);
            ans[i][j]=min(ans[i][j],min(ans[i-1][j],ans[i][j-1])+p1);
        }
    }
    
    cout<<ans[n][n];
    return 0;
}
2025/7/29 16:35
加载中...