程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> uva437(經典DAG題目)

uva437(經典DAG題目)

編輯:C++入門知識

uva437(經典DAG題目)


題意:有n(n<=30)中立方體,每種都有無數多個,要求選一些立方體摞成一根盡量高的柱子,立方體使用時的三種擺放方式都可以。並且使得每個立方體的底面長寬分別小於它下方的立方體的底面長寬。


解法:其中每種立方體有三種擺放方式,可以將每種轉化成三種立方體,因為一個立方體不可能在一個相同的自己上面,所有每種一個就夠了。90個點,並且是有向無環的圖,求最長路徑,可以拓撲排序,也可以dfs。


代碼:

/******************************************************
* @author:xiefubao
*******************************************************/
#pragma comment(linker, "/STACK:102400000,102400000")
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
//freopen ("in.txt" , "r" , stdin);
using namespace std;

#define eps 1e-8
#define zero(_) (abs(_)<=eps)
const double pi=acos(-1.0);
typedef long long LL;
const int Max=110;
const LL INF=0x3FFFFFFF;
struct node
{
   int x,y;
   int tall;
} points[Max];
bool operator<(const node& a,const node& b)
{
    return (a.x vec[Max];
int ans[Max];
int n;
void dfs(int t)
{
    if(ans[t]!=-1)
    return ;
    int ma=0;
    for(int i=0;i>n&&n)
  {
      for(int i=0;i<3*n;i++)
      vec[i].clear();
      for(int i=0;i

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved