Uva 437 바빌론 탑 & & UVA10003
구조체로 돌의 세 가지 방치 상황을 기록하고 면적에 따라 순서를 정한다.
dp[i] = max(dp[i],dp[j] + block[i].hight);i를 선택했을 때 앞의 몇 개와 비교하여 현재 상황에서 가장 높은 가능성을 찾아내다
<span style="font-size:18px;">#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
struct node
{
int x;
int y;
int hight;
}block[100];
int dp[100];
bool cmp(node a,node b)
{
return a.x*a.y < b.x*b.y;
}
int main()
{
int n,a,b,c,cas = 1;
while(scanf("%d",&n) && n)
{
int tmp = 1;
for(int i = 0;i < n;i++)
{
scanf("%d%d%d",&a,&b,&c);
block[tmp].x = a;
block[tmp].y = b;
block[tmp++].hight = c;
block[tmp].x = c;
block[tmp].y = a;
block[tmp++].hight = b;
block[tmp].x = b;
block[tmp].y = c;
block[tmp++].hight = a;
}
sort(block+1,block+tmp,cmp);
memset(dp,0,sizeof(dp));
for(int i = 1;i < tmp;i++)
{
dp[i] = block[i].hight;
for(int j = 1;j < i;j++)
{
if(((block[i].x>block[j].x)&&(block[i].y>block[j].y))||((block[i].x>block[j].y)&&(block[i].y>block[j].x)))
dp[i] = max(dp[i],dp[j] + block[i].hight);
}
}
int maxn=0;
for(int i = 1;i < tmp;i++)
if(dp[i] > maxn)
maxn = dp[i];
printf("Case %d: maximum height = %d
",cas++,maxn);
}
return 0;
}</span>
길이가 10미터인 나무 막대기는 반드시 2, 4, 7미터의 곳에서 절단해야 한다.이럴 땐 몇 가지 선택이 있어.너는 먼저 2미터를 자른 다음에 4미터를 자른 다음에 마지막에 7미터를 자른 곳을 선택할 수 있다.이러한 선택의 비용은 10+8+6=24이다.처음 자를 때는 막대기 길이가 10m, 두 번째 자를 때는 막대기 길이가 8m, 세 번째 자를 때는 막대기 길이가 6m였기 때문이다.그러나 만약에 네가 먼저 4미터를 자른 다음에 2미터를 자른 곳, 마지막으로 7미터를 자른 곳을 선택한다면 그 원가는 10+4+6=20이다. 이 원가가 비교적 좋은 선택이다.
너의 사장은 너의 컴퓨터 능력이 반드시 나무 막대기를 자르는 데 필요한 최소한의 비용을 찾아낼 수 있을 것이라고 믿는다.
p[j]-p[i]는 첫 번째 칼의 비용을 대표하며, 잘라서 i~k와 k~j 두 부분으로 바꿉니다.
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAX 0x3f3f3f3f
using namespace std;
int len;
int d[50][50];
int p[51];
int main()
{
int n;
while(scanf("%d",&n) && n)
{
int m;
scanf("%d",&m);
for(int i=1; i <= m; i++)
scanf("%d",&p[i]);
p[0] = 0,p[m+1] = n;
memset(d,0,sizeof(d));
for(int l = 2; l <= m+1; l++)
for(int i = 0; i + l <= m+1; i++)
{
int j = i + l;
d[i][j] = MAX;
for(int k = i+1; k < j; k++)
{
d[i][j] = min(d[i][j],d[i][k]+d[k][j]+p[j]-p[i]);
}
}
printf("The minimum cutting is ");
printf("%d.
",d[0][m+1]);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.