UVa 825 - Walking on the Safe Side(단순 DP+데이터 읽기)
분석: 간단하게 보면 이것이 바로 간단한 DP다.상태 f[i][j]는 (i, j)까지 가는 방안의 수를 표시하고 왼쪽으로 가고 아래로 가는 상황만 고려한다.
제목 구덩이: 이렇게 쓰면 제목이 물 같고 AC가 되는 것 같지만 사실 곰곰이 생각해보면 아직 고려하지 못한 경우가 많거나 제목 표현이 완비된 것 같다.처음에는 생각을 많이 했는데, 예를 들어 함정 때문에 오른쪽으로 가다가 왼쪽으로 가야 종점에 도착할 수 있다. 제목과 걷는 방향을 정하기 때문에 도착할 수 있는 최단길만 말했기 때문이다.이렇게 되면 위의 방식으로 옮기면 정확한 결과가 나오지 않는다.그러나 이런 데이터가 나오지 않았다는 사실이 증명되었다...그리고 제목은 데이터 범위를 말하지 않았어요...너무 규범에 맞지 않는다.
수확: 그래서 이 문제의 주요 수확은 get이 새로운 읽기 방식을 얻었습니다...stringstream 이렇게 문자열을 처리하면 문자열에서 빈칸으로 구분된 숫자를 직접 추출할 수 있습니다.
#include <sstream>
string s;
int main()
{
getline(cin,s);
stringstream ss(s);
while(ss>>num) a[num]=1; //
}
제목 소스:
// Created by ZYD in 2015.
// Copyright (c) 2015 ZYD. All rights reserved.
//
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <cstring>
#include <climits>
#include <string>
#include <vector>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
using namespace std;
#define Size 100000
#define ll long long
#define mk make_pair
#define pb push_back
#define mem(array) memset(array,0,sizeof(array))
typedef pair<int,int> P;
string s;
int dp[1005][1005],used[1005][1005],n,m,t;
int main()
{
freopen("in.txt","r",stdin);
cin>>t;
while(t--)
{
cin>>n>>m;
mem(used);
mem(dp);
for(int i=1;i<=n;i++)
{
int x,lie;
scanf("%d",&x);
getline(cin,s);
stringstream ss(s);
while(ss>>lie) used[x][lie]=1;
}
dp[0][1]=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(!used[i][j])
{
dp[i][j]=dp[i-1][j]+dp[i][j-1];
}
cout<<dp[n][m]<<endl;
if(t) cout<<endl;
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【경쟁 프로 전형적인 90문】008의 해설(python)의 해설 기사입니다. 해설의 이미지를 봐도 모르는 (이해력이 부족한) 것이 많이 있었으므로, 나중에 다시 풀었을 때에 확인할 수 있도록 정리했습니다. ※순차적으로, 모든 문제의 해설 기사를 들어갈 예정입니다. 문자열...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.