로곡-P1004 - 체크수 - 간단dp
이 문제는 간단한 dp로 분류되었지만 조금도 간단하지 않은 것 같다...이런 두 번 하는 dp는 정말 어떻게 쓰는지 잘 모르겠다.만약 욕심을 두 번 낸다면 이것이 최우선이라는 것을 증명할 수 없을 것 같다.
문제풀이를 직접 보면 문제풀이는 4개의 차원을 설정하고 두 사람이 동시에 가야 하는데...그런데 어떻게 같은 물건을 두 사람이 가지는 것을 피할 수 있습니까?
dp[i][j][k][l]를 설정하면 첫 번째 사람이ij에 도착하고 두 번째 사람이kl에 도착하면 실현할 수 있는 가장 큰 방법을 나타낸다. 그리고 1차원[p]을 더하면 현재 00,01,02,10,11,12,20,21,22개의 물품을 찾았고 dp의 내용은 바이커다!이렇게 하면 모든 메시지를 완벽하게 표현할 수 있다!이렇게 하면 같은 아이템은 한 상태를 다른 상태로 옮길 수 있습니다. 이 아이템이 동시에 획득되지 않도록 보증합니다!공간 복잡도?나는 왜 공간의 복잡도를 관리해야 합니까?이 dp 시간 복잡도는 모두 공간 복잡도와 동급이다.
자, 다른 사람의 상태 설정을 보고 아이디어를 찾아서 먼저 직접 써 보세요.
귀신이라고 써. 내가 갈게. 문제를 잘못 읽었어. 물건 두 개만 가져올 수 있는 게 아니라... 나 또 자야 돼...
두 사람이 동시에 걷는 것을 주의해라!만약 두 사람이 동시에 가지 않았다면 어떻게 되었을까?그러면 복잡도가 올라갈 뿐만 아니라 n.²,그리고 현재 칸이 다른 사람의 길에 빼앗겼는지 판단할 수 없다.
#include
using namespace std;
#define ll long long
int dp[10][10][10][10];
int a[10][10];
int main(){
int n;
scanf("%d",&n);
int x,y,v;
while(1){
scanf("%d%d%d",&x,&y,&v);
if(x==0&&y==0&&v==0)
break;
a[x][y]=v;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++){
for(int l=1;l<=n;l++){
dp[i][j][k][l]=max(max(dp[i-1][j][k-1][l],dp[i-1][j][k][l-1]),max(dp[i][j-1][k-1][l],dp[i][j-1][k][l-1]));
dp[i][j][k][l]+=a[i][j];
if(i==k&&j==l)
;
else
dp[i][j][k][l]+=a[k][l];
}
}
}
}
printf("%d
",dp[n][n][n][n]);
}
다른 사람의 문제 해설 뒤에 쪽지와 회문을 전하는 경로도 있는데 이런 양쪽을 함께 하는 dp이다.
전재 대상:https://www.cnblogs.com/Yinku/p/10325524.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.