先上题目:
P1004 方格取数
下面上ac代码:
///如果先走第一个再走第二个不可控因素太多 #include<bits/stdc++.h> #define ll long long using namespace std; ll f[11][11][11][11]; ll a[11][11]; int main() { ios::sync_with_stdio(false); ll n,xx,yy,zz; cin>>n; while(scanf("%lld %lld %lld",&xx,&yy,&zz)==3&&!(xx==0&&yy==0&&zz==0)) a[xx][yy]=zz;//导入基本数据 //我们需要f[n][n][n][n]作为答案,它表示走完两次的总数 // f[1][1][1][1]=a[1][1];//这里不用赋初值 for(ll i=1;i<=n;i++) for(ll j=1;j<=n;j++) for(ll x=1;x<=n;x++) for(ll y=1;y<=n;y++) { f[i][j][x][y]=a[i][j]+a[x][y]+max(max(max(f[i-1][j][x-1][y],f[i-1][j][x][y-1]),f[i][j-1][x-1][y]),f[i][j-1][x][y-1]); // f[i][j][x][y]=max(f[i][j][x][y],f[i-1][j][x-1][y]+a[i][j]+a[x][y]); // f[i][j][x][y]=max(f[i][j][x][y],f[i-1][j][x][y-1]+a[i][j]+a[x][y]); // f[i][j][x][y]=max(f[i][j][x][y],f[i][j-1][x-1][y]+a[i][j]+a[x][y]); // f[i][j][x][y]=max(f[i][j][x][y],f[i][j-1][x][y-1]+a[i][j]+a[x][y]); if(i==x&&j==y) f[i][j][x][y]-=a[i][j]; } cout<<f[n][n][n][n]<<endl; }