社区讨论

求助,TLE两个点

P1171售货员的难题参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@lo2ikxmc
此快照首次捕获于
2023/10/23 14:26
2 年前
此快照最后确认于
2023/10/23 14:26
2 年前
查看原帖
为什么一直TLE,通过代码公开计划我看其他人比我常数还大一点,他能直接过
CPP
#include<bits/stdc++.h>
using namespace std;
#define Min(a,b)    a>b?b:a

const int N=1<<20,M=21,INF=0x3f3f3f3f;
int f[M][N];
int n,ans;
int g[M][M];

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    cin>>n;
    for(int i=1;i<=n;++i)
    {
        for(int j=1;j<=n;++j)
            cin>>g[i][j];
    }
    int size=1<<n;
//    for(int i=1;i<=n;++i)
//    {
//        for(int j=1;j<size;++j)
//            f[i][j]=INF;
//    }
    memset(f,0x3f,sizeof f);
    ans=INF;
    f[1][1]=0;

    for(int k=2 ; k< size ; ++k)
    {
        for(int i=1 ;i<=n ; ++i)    //起点
        {
            if(k&(1<<i-1)==0)   continue;
            for(int j=2;j<=n;++j)       //终点
            {
                if(i==j)    continue;
                if(k&(1<<j-1)==0)   continue;
                f[j][k]=Min( f[j][k] , f[i][k^(1<<j-1)]+g[i][j]);
            }
        }
    }


    for(int i=2;i<=n;i++)
    {
        ans=Min(ans,f[i][size-1]+g[i][1]);
    }

    cout<<ans<<endl;
    return 0;

}

回复

3 条回复,欢迎继续交流。

正在加载回复...