DP 입문 POJ - 3254
3258 단어 DP
POJ - 3254형 DP
Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ 12) square parcels. He wants to grow some yummy corn for the cows on a number of squares. Regrettably, some of the squares are infertile and can’t be planted. Canny FJ knows that the cows dislike eating close to each other, so when choosing which squares to plant, he avoids choosing squares that are adjacent; no two chosen squares share an edge. He has not yet made the final choice as to which squares to plant.
Being a very open-minded man, Farmer John wants to consider all possible options for how to choose the squares for planting. He is so open-minded that he considers choosing no squares as a valid option! Please help Farmer John determine the number of ways he can choose the squares to plant.
Input Line 1: Two space-separated integers: M and N Lines 2… M+1: Line i+1 describes row i of the pasture with N space-separated integers indicating whether a square is fertile (1 for fertile, 0 for infertile) Output Line 1: One integer: the number of ways that FJ can choose the squares modulo 100,000,000. Sample Input 2 3 1 1 1 0 1 0 Sample Output 9 Hint Number the squares as follows: 1 2 3 4
There are four ways to plant only on one squares (1, 2, 3, or 4), three ways to plant on two squares (13, 14, or 34), 1 way to plant on three squares (134), and one way to plant on no squares. 4+3+1+1=9.
대체적인 제목: 길고 넓이가 고정된 농장을 제시했다. 0은 소를 방목할 수 없고, 1은 소를 방목할 수 있다. 그러나 또 하나의 요구는 임의의 두 마리의 소가 서로 인접할 수 없다는 것이다. 이것은 같은 줄에 인접한 것이냐 같은 열에 인접한 것이냐의 문제와 관련이 있다.
예에서 가능한 방우 전략은 1:1 2:2 3:3 4:4 5:1 3:1 4:1 4:3 4:3 4:3 8:1 3:4 9: 모든 땅에서 방우를 하지 않는다는 것이다.
정의 상태 dp[i][j], i행 상태가 j일 때 소를 방목하는 종수.j의 경우 우리는 2진법으로 전환하여 낮은 위치에서 높은 위치로 순서대로 1을 표시한다
소 0은 소를 방목하지 않은 것을 의미하며, 일행의 모든 상황을 나타낼 수 있다.
그럼 전이 방정식 dp[i][j]=sum(dp[i-1][k])
상태 압축 dp의 관건은 비트 연산을 잘 처리하는 것이다.
이 문제는 & 이 연산자를 사용했다.
x&(x<<1)로 한 수가 서로 인접한 두 자리가 동시에 1인지 판단하고, 만약 동시에 1인다면 하나의 값을 되돌려주고, 그렇지 않으면 0으로 되돌려주면 일부 상태를 최적화시킬 수 있다.
x & y의 브리 값으로 동일한 것이 동시에 1인지 아닌지를 판단합니다.
#include
#include
#include
#include
#include
using namespace std;
const int N = 13;
const int M = 1<>x;
if(x==0)
map[i]+=(1<
judge2 함수의 판단을 통해 현재의 이런 방우 방식이 현재 정해진 땅에서 실행될 수 있는지 알 수 있습니다.map[i]+=(1<
1)) 이 단계의 조작을 통해 현재 실행 중인 목장을 위치에 따라 거꾸로 얻은 결과, 예를 들어 1 0 1의 목장은 이 조작이 끝난 후의
맵의 실제 값은 010의 10진수 값, 즉 2가 맵 수조의 상응하는 위치에 저장된 다음에judge2 함수의 재판단을 통해
줄이 저장한 숫자를'와'연산을 하면 0인지 아닌지를 판단할 수 있다. 0이면 이 줄에서 다음과 같은 배치를 할 수 있다. 모르면 스스로 몇 개를 찾을 수 있다.
2진'과'조작의 예로 스스로 더욱 깊은 사고를 한다.마지막으로 서로 인접한 두 줄 사이에서judge2 함수와 유사한 조작을 해야 한다.
두 줄 사이의 같은 열의 위치는 소를 방목할 수 없기 때문에 현재 줄과judge2의 판단을 한 후에 이전 줄과 진행해야 한다
두 가지 조건이 모두 만족해야만 현재 행해지고 있는 방우 전략을 세울 수 있다는 판단이다.그리고 이 조작을 할 때 상응하는 동적 기획을 하는 거예요.
과정은 dp수조로 현재 줄의 현재 상태에서 제목을 충족시킬 수 있는 방우 전략을 기록하고, 마지막으로 for순환은 마지막 줄의 각종 상태를 반복한다.
그에 대응하는 값은 마지막으로 이 목장 아래에서 가장 가능한 소 방목 전략의 수량이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[BOJ]11048(python)python 풀이 DP를 이용해 풀이 보통 이런 문제는 dfs나 bfs로 풀이하는 것이여서 고민을 했는데 이 문구 덕분에 DP 를 이용해 풀이할 수 있었다 뒤로 돌아가는 등의 경우를 고려하지 않아도 되기 때문이다 코...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.