1 条题解
-
0
一个普普通通的四维DP,我们用mp[i][j]来储存整张图,f[i1][j1][i2][j2]储存第一次走到(i1,j1)和第二次走到(i2,j2)时的分数,对于相同情况直接加一次得分,否则加两次就行了。
这道题数据范围实在太水了,所以不用优化,数组开11就行了(doge)#include <bits/stdc++.h> using namespace std; int i,l,k,n,m=1; int mp[11][11],f[11][11][11][11]; struct point { int x,y,nu; }p[100]; signed main() { ios::sync_with_stdio(false); cin.tie(0); cin>>n; while(1){ int a,b,c; cin>>a>>b>>c; if (!a and !b and !c)break; p[m].x=a; p[m].y=b; p[m].nu=c; m++; mp[a][b]=c; } for (int i=1;i<=n;i++){ for (int j=1;j<=n;j++){ for (int k=1;k<=n;k++){ l=i+j-k; if (l<=0)break; f[i][j][k][l]=max(f[i-1][j][k-1][l], max(f[i-1][j][k][l-1], max(f[i][j-1][k-1][l], f[i][j-1][k][l-1]))); if (i==k and j==l){ f[i][j][k][l]+=mp[i][j]; } else { f[i][j][k][l]+=mp[i][j]+mp[k][l]; } } } } cout<<f[n][n][n][n]; return 0; }
- 1
信息
- ID
- 236
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 10
- 标签
- 递交数
- 3
- 已通过
- 3
- 上传者