题解 | #三子棋#

三子棋

https://ac.nowcoder.com/acm/contest/47914/A

G.

dpi,jdp_{i,j} 为考虑前 ii11 交换到第 jj 个时前ii11 均互不相邻的最小操作数。

枚举 jj 的同时从 j2j-2 开始往低位转移即可。

时间复杂度 O(n3)O(n^3)

#include<bits/stdc++.h>
using namespace std;
int dp[505][505];
string s;
int a[505];
int b[505];
int n;
int main()
{
    cin>>n;
    cin>>s;
    s = " "+s;
    int cnt = 0;
    memset(dp,0x3f3f3f3f,sizeof(dp));
    for(int i = 1;i<=n;++i)
        if(s[i]=='1')
            a[++cnt] = i;
    if(cnt>(n+1)/2)
    {
        cout<<-1<<'\n';
        return 0;
    }
    for(int i = 1;i<=n;++i)
        dp[1][i] = abs(i-a[1]);
    for(int i = 2;i<=cnt;++i)
        for(int j = i;j<=n;++j)
            for(int k = j-2;k>=i-1;--k)
                dp[i][j] = min(dp[i-1][k]+abs(j-a[i]),dp[i][j]);
    int ans = 0x3f3f3f3f;
    for(int i = 1;i<=n;++i)
        ans = min(ans,dp[cnt][i]);
    cout<<ans<<'\n';
    return 0;
}
全部评论
1 0 会wa
点赞 回复 分享
发布于 2022-12-03 00:26 湖北
确实,全0就wa了,数据还是弱了。特判一下就好了
点赞 回复 分享
发布于 2022-12-03 01:08 福建

相关推荐

不愿透露姓名的神秘牛友
02-12 10:05
小米集团 算法工程师 28.0k*15.0
泡沫灬一触即破:楼上那个看来是看人拿高薪,自己又不如意搁这泄愤呢是吧,看你过往评论很难不怀疑你的精神状态
点赞 评论 收藏
分享
剑桥断刀:找啥工作,牛客找个比如大厂软开或者随便啥的高薪牛马,大把没碰过妹子的技术仔,狠狠拿捏爆金币
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务