首页 > 代码库 > TYVJ1414
TYVJ1414
多进程DP
现在才知道多进程的是有多么的恶心。。。
做过了1011传纸条,这题就没什么难度了,只要在传纸条上加上一维就行,最恶心的地方在于,这题没有限定走过的不能走,所以,对于每个状态有八个方向可以转移过来。。。。具体看代码吧
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 5 using namespace std; 6 const int maxn = 41; 7 int a[maxn][maxn],dp[maxn+maxn][maxn][maxn][maxn]; 8 int main() 9 {10 //freopen("in.txt","r",stdin);11 int n;12 while(cin>>n)13 {14 for(int i = 1;i<=n;++i)15 for(int j = 1;j<=n;++j)16 scanf("%d",&a[i][j]);17 memset(dp,0,sizeof(dp));18 dp[2][1][1][1] = a[1][1];19 for(int r = 3;r<=n*2;++r)20 for(int i = 1;i<r;++i)21 for(int j = 1;j<r;++j)22 for(int k = 1;k<r;++k)23 {24 int t = max(dp[r-1][i][j][k],max(dp[r-1][i][j-1][k],max(dp[r-1][i][j-1][k-1],dp[r-1][i][j][k-1])));25 t = max(t,max(dp[r-1][i-1][j][k],max(dp[r-1][i-1][j][k-1],max(dp[r-1][i-1][j-1][k-1],dp[r-1][i-1][j-1][k]))));26 int t1 = a[i][r-i],t2 = a[j][r-j],t3 = a[k][r-k];27 t+=a[i][r-i];a[i][r-i] = 0;28 t+=a[j][r-j];a[j][r-j] = 0;29 t+=a[k][r-k];a[k][r-k] = t3;30 a[i][r-i] = t1;a[j][r-j] = t2;31 dp[r][i][j][k] = t;32 }33 printf("%d\n",dp[n+n][n][n][n]);34 }35 36 return 0;37 }
TYVJ1414
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。