Uva11212
6012 단어 oj
그리고 이 블로그는 IDA*의 기본 프레임워크를 썼습니다.https://blog.csdn.net/cFarmerReally/article/details/52124815
//Rey Uva11212 10ms
// 1 2,
#include
const int maxn = 9;
int n,a[maxn];
inline bool End()
{
for(int i = 1; i < n; i++){
if(a[i] <= a[i-1]) return false;
}
return true;
}
inline int h()
{
int cnt = 0;
for(int i = 1; i < n; i++)
if(a[i] != a[i-1]+1) cnt++;
return cnt;
}
int maxd;
const int intsz = sizeof(int);
const int asz = sizeof(a);
bool dfs(int d)
{
if(3*d + h() > 3*maxd) return false;
if(d==maxd && End()) return true;
int old[maxn];// a
memcpy(old,a,asz);
int b[maxn];//
for(int i = 0; i < n; i++) if( i == 0 || old[i] != old[i-1] + 1) // 3
for(int j = i; j < n; j++) { // 3
while(j+1 < n && old[j+1] == old[j] + 1)j++;// 3
memcpy(b,old+i,intsz*(j-i+1));
//
for(int k = j+1;k < n;k++){// , 【 !】
while(k+1 < n && old[k+1] == old[k] + 1)k++;// 3
memcpy(a+i,old+j+1,intsz*(k-j));
memcpy(a+i+k-j,b,intsz*(j-i+1));
if(dfs(d+1))return true;
//
memcpy(a,old,asz);
}
}
return false;
}
inline int solve()
{
if(End())return 0;
for(maxd = 1; maxd < 5 ;maxd++)
if(dfs(0)) return maxd;
return 5;
}
int main()
{
//freopen("in.txt","r",stdin);
int Cas = 0;
while(~scanf("%d",&n)&&n) {
for(int i = 0; i < n; i++)
scanf("%d",a+i);
int ans = solve();
printf("Case %d: %d
",++Cas,ans);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PAT 1094 구 글 채용메모: 1. subString 왼쪽 닫 고 오른쪽 열 기 2, 0 은 출력 을 보충 해 야 합 니 다. 그렇지 않 으 면 형식 이 잘못 되 었 습 니 다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.