论暴力DP如何优化?
  • 板块学术版
  • 楼主tangyuqiang
  • 当前回复4
  • 已保存回复4
  • 发布时间2021/7/10 16:57
  • 上次更新2023/11/4 15:08:27
查看原帖
论暴力DP如何优化?
422830
tangyuqiang楼主2021/7/10 16:57

这道DP题困扰了本蒟蒻良久,

主要问题是用朴素(暴力DP)的方法便会:TLE+MLE+RE!

作为刚学DP的萌新,自然不会 QAQ

求求各位大犇看看怎么压缩四维数组

SP703 SERVICE - Mobile Service

本蒟蒻能力有限,最多打这么多了:

#include<bits/stdc++.h> 
using namespace std;
int f[105][105][105][105];
int l,n,c[2005][2005],p[200005];
int mymin=9999999;
int main(){
   int T;
   cin>>T;
   for(int ii=1;ii<=T;ii++){
   	cin>>l>>n;
   	for(int i=1;i<=l;i++){
   		for(int j=1;j<=l;j++){
   			cin>>c[i][j];
   		}
   	}
   	for(int i=1;i<=n;i++){
   		cin>>p[i];
   	}
   	//输入
   	for(int i=1;i<=n;i++){
   		for(int j=1;j<=l;j++){
   			for(int k=1;k<=l;k++){
   				for(int x=1;x<=l;x++){
   					f[i+1][p[i+1]][k][x]=min(f[i+1][p[i+1]][k][x],f[i][j][k][x]+c[j][p[i]]);
   					f[i+1][j][p[i+1]][x]=min(f[i+1][j][p[i+1]][x],f[i][j][k][x]+c[k][p[i]]);
   					f[i+1][i][k][p[i+1]]=min(f[i+1][j][k][p[i+1]],f[i][j][k][x]+c[x][p[i]]);
   				}
   			}
   		}
   	}
   	//dp拓展
   	for(int j=1;j<=l;j++){
   		for(int k=1;k<=l;k++){
   			for(int x=1;x<=l;x++){
   				mymin=min(mymin,f[n][j][k][x]);
   			}
   		}
   	}
   	//目标解 
   	cout<<mymin;
   }
   return 0;
}

感觉我直接拉低了洛谷平均智商啊,QAQ

2021/7/10 16:57
加载中...