블 루 브리지 컵 겨울방학 작업
주의: 당신 이 제출 한 것 은 정수 여야 합 니 다. 불필요 한 내용 이나 설명 문 자 를 쓰 지 마 십시오.
분석: 이 문 제 는 간단 한 전체 배열 이다. 가장 생각 하기 쉬 운 사 고 는 1 ~ 13 을 모두 배열 한 다음 에 앞의 12 개의 숫자 를 하나하나 빈 값 으로 부여 하고 12 개의 숫자 를 모두 확정 한 후에 네 개의 등식 판단 을 하 는 것 이다.동시에 C + + 의 STL 라 이브 러 리 에 기 존 함수 - next 가 있 습 니 다.permutation, 실현 하기 가 더욱 간단 합 니 다.
#include
#include
#include
using namespace std;
int a[]={1,2,3,4,5,6,7,8,9,10,11,12,13};
bool check()
{
bool b1=(a[0]+a[1]==a[2]);
bool b2=(a[3]-a[4]==a[5]);
bool b3=(a[6]*a[7]==a[8]);
bool b4=(fabs((a[9]*1.0)/(a[10]*1.0)-a[11]*1.0)<=0.00000000000001);
if(b1 && b2 &&b3 && b4)
return true;
else
return false;
}
int main()
{
int res=0;
do
{
if(check())
{
res++;
}
}while(next_permutation(a,a+13));
cout<
비록 이런 방법 은 실행 할 수 있 지만, 가장 나 쁜 방법 은 효율 이 너무 낮 기 때문이다.우 리 는 깊 은 검색 에 가 지 를 자 르 는 방법 으로 프로그램 을 최적화 시 킬 생각 이다.
#include
#include
#include
using namespace std;
int res=0;
int a[]={1,2,3,4,5,6,7,8,9,10,11,12,13};
void dfs(int start)
{
if(start>=3 )
if(a[0]+a[1]!=a[2]) return ;// , ,
if(start>=6)
if(a[3]-a[4]!=a[5]) return ;// ,
if(start>=9)
if(a[6]*a[7]!=a[8]) return ;
if(start>=12)
if(a[11]*a[10]==a[9])
{
for(int i=0;i<12;i++)
cout<
두 번 째 최적화 방법 을 사용 할 수 있 는 이 유 는 각 등식 을 판단 할 때 1 ~ 13 의 모든 배열 이 끝 날 때 까지 기다 릴 필요 가 없 기 때 문 입 니 다. 우 리 는 이미 배열 한 앞의 몇 개의 숫자 를 판단 할 수 있 습 니 다. 예 를 들 어 우 리 는 앞의 세 개의 숫자 를 찾 았 습 니 다. 1, 2, 4 이때 첫 번 째 등식 판단 을 할 수 있 습 니 다. 1 + 2! =4. 그러면 1, 2, 4 를 접두사 로 배열 하면 계속 판단 하지 않 고 가지치기 효 과 를 얻 을 수 있 습 니 다.
PS: 블 루 브리지 컵 문제 도 많이 다 르 지 않 아 요. 경기 가 곧 다가 오 니까 행운 을 빌 어 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.