jzoj1266, P1879-[USACO06NOV] 옥수수밭 Corn Fields[상태압축, dp]
본제
평가 레코드:https://www.luogu.org/recordnew/lists?uid=52918&pid=P1879
소홀하다
n*m의 행렬이 있는데, 어떤 곳은 놓을 수 있고, 어떤 곳은 놓을 수 없고, 다른 곳은 놓을 수 없으니, 방치 방법의 총수를 구하세요.
문제풀이의 방향
먼저 이진법으로 각 줄의 방치 가능 상태를 표시한다.그리고state[i]s t a t e[i]로 단행 i종의 상태만 계산하는 것이 합법적인지 여부를 나타낸다.그리고 매번 상태를 왼쪽으로 옮기고 오른쪽으로 옮기면 & 연산으로 합법성을 판단하면 됩니다.그 다음에 우리는 dp로 f[i][j]f[i][j]로 제i행 제j종의 상태를 표시하는 방안수를 시작한다.그리고 우리는 윗줄의 상태 kk를 열거한 다음에 두 상태가 합법적인지 판단한다.
code
#include
#include
#define MN 4100
using namespace std;
int n,m,c,f[MN],F[14][MN],state[MN],ans,MS;
int main()
{
//freopen("cowfood.in","r",stdin);
//freopen("cowfood.out","w",stdout);
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
{
scanf("%d",&c);
f[i]=(f[i]<<1)+c;
}
MS=1<<m;
for (int i=0;istate[i]=!(i&(i<<1)||i&(i>>1));
F[0][0]=1;
for (int i=1;i<=n;i++)
for (int j=0;jif (state[j]&&(j&f[i])==j)
for (int k=0;kif (!(k&j))
F[i][j]=(F[i][j]+F[i-1][k])%100000000;
for (int i=0;i%100000000;
printf("%d",ans);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【경쟁 프로 전형적인 90문】008의 해설(python)의 해설 기사입니다. 해설의 이미지를 봐도 모르는 (이해력이 부족한) 것이 많이 있었으므로, 나중에 다시 풀었을 때에 확인할 수 있도록 정리했습니다. ※순차적으로, 모든 문제의 해설 기사를 들어갈 예정입니다. 문자열...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.