UVa 10344 - 23 out of 5
2442 단어 최적화permutation
코드는 다음과 같습니다.
(0.728s):
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
using namespace std;
int a[5], flag;
void solve(int cur, int sum)
{
if(cur == 5)
{
if(sum == 23)
flag = 1;
return ;
}
solve(cur + 1, sum + a[cur]);
if(flag)
return;
solve(cur + 1, sum - a[cur]);
if(flag)
return;
solve(cur + 1, sum * a[cur]);
if(flag)
return;
}
int main()
{
#ifdef test
freopen("sample.txt", "r", stdin);
#endif
int b[5], s[5];
while(1)
{
for(int i = 0; i < 5; i++)
scanf("%d", &b[i]);
if(!b[0])
break;
for(int i = 0; i < 5; i++)
s[i] = i;
flag = 0;
do
{
for(int i = 0; i < 5; i++)
a[s[i]] = b[i];
solve(1, a[0]);
if(flag)
break;
}
while(next_permutation(s, s + 5));
if(flag)
printf("Possible
");
else
printf("Impossible
");
}
return 0;
}
정렬 후 처리가 더욱 간단해지고 최적화됩니다(0.432s).
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
using namespace std;
int a[5], flag;
void solve(int cur, int sum)
{
if(cur == 5)
{
if(sum == 23)
flag = 1;
return ;
}
solve(cur + 1, sum + a[cur]);
if(flag)
return;
solve(cur + 1, sum - a[cur]);
if(flag)
return;
solve(cur + 1, sum * a[cur]);
if(flag)
return;
}
int main()
{
#ifdef test
freopen("sample.txt", "r", stdin);
#endif
while(1)
{
for(int i = 0; i < 5; i++)
scanf("%d", &a[i]);
if(!a[0])
break;
flag = 0;
sort(a, a + 5); //
do
{
solve(1, a[0]);
if(flag)
break;
}
while(next_permutation(a, a + 5));
if(flag)
printf("Possible
");
else
printf("Impossible
");
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
깨끗한 것을 보고 싶기 때문에 최적화 함수의 벤치마크에 이용되는 함수의 가시화를 해 보았다결정되지 않음 (자기 만족) 「헤이 이런 거 있어」라고 생각하는 사람 최적화 함수란? 거친 이미지로 1) x + 10 = 25 2) x + 60 = 15 3) x + 45 = 60 의 x를 기계에 구할 때 정확하게 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.