TLE求助
查看原帖
TLE求助
64976
hewo楼主2021/9/12 19:31

udebug上的数据都过了(请无视中文乱码)

不知道为什么会TLE

#include<bits/stdc++.h>

using namespace std;

const int MX=2*1000+10;
#define LL long long
#define inf 0x3f3f3f3f
#define modn 998244353

inline int read()
{
    int x=0,f=1;char ch=getchar();
    while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}
    while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
    return x*f;
}

int dp[MX][MX];

int n,m;       
int w[MX][MX];      

int ans=inf,head; 

int pat[MX][MX];

inline void csh()
{
	memset(dp,0x3f,sizeof(dp));
	ans=inf;
	memset(pat,0,sizeof(pat));
}

int main(int argc, char const *argv[])
{
//	freopen("debug.in","r",stdin);
//	freopen("debug.out","w",stdout);
	while(cin>>m>>n)
	{
		csh();
		for(int i=1;i<=m;i++)
		{
			for(int j=1;j<=n;j++)
			{
				w[i][j]=read();
			}
		}
		for(int j=n;j>=1;j--)
		{
			for(int i=1;i<=m;i++)
			{
				if(j==n)
				{
					dp[i][j]=w[i][j];//杈圭晫鑷劧灏辨槸w
					continue;
				}
				int f[3]={i,i-1,i+1};//orzzzzzzzzz
				if(f[1]<=0) f[1]=m;
				if(f[2]>=m+1) f[2]=1;
				sort(f,f+3);
				dp[i][j]=inf;
				for(int k=0;k<3;k++)
				{
					int value=dp[f[k]][j+1]+w[i][j];
					if(value<dp[i][j])//婊¤冻瀛楀吀搴忔渶灏?
					{
						dp[i][j]=value;
						pat[i][j]=f[k];
					}
				}
			}
		}
		for(int i=1;i<=m;i++)
		{
			if(dp[i][1]<ans)
			{
				ans=dp[i][1];
				head=i;
			}
		}
		//printf("head: %d\n",head);
        printf("%d",head);
		for(int i=pat[head][1],j=2;j<=n;i=pat[i][j],j++)
		{
			printf(" %d",i);
		}
		puts("");
		printf("%d\n",ans);
	}
	return 0;
}
2021/9/12 19:31
加载中...