-
H - Commandos
- Gym - 101147H
- 题意:起点为 10 1 1 然后整个图为10*10*10,有一些点有固定数量的人质,按照一定的运动方向求最多能够解救多少人质
- 按照每个点所能到达的点,来写状态转移方程:
-
dp[i][j][k]=max(dp[i-1][j][k],max(dp[i][j+1][k],dp[i][j][k+1]))+vis[i][j][k];
-
#include<bits/stdc++.h> using namespace std; #define ll long long int n,m,ans,t,f,x,y,h; #define maxn 12 int vis[maxn][maxn][maxn]; int dp[maxn][maxn][maxn]; int main() { freopen("commandos.in","r",stdin); scanf("%d",&t); while(t--) { memset(vis,0,sizeof(vis)); memset(dp,0,sizeof(dp)); ans=0; scanf("%d",&n); for(int i=1; i<=n; i++) { scanf("%d%d%d%d",&f,&y,&x,&h); vis[f][y][x]+=h; } for(int i=1; i<=10; i++) for(int j=10; j>=1; j--) for(int k=10; k>=1; k--) dp[i][j][k]=max(dp[i-1][j][k],max(dp[i][j+1][k],dp[i][j][k+1]))+vis[i][j][k]; printf("%d\n",dp[10][1][1]); } return 0; }
H - Commandos Gym - 101147H -反向DP
最新推荐文章于 2020-07-12 16:27:02 发布