uva10051(dp 立方體塔, 拆分)

2021-07-04 04:35:08 字數 1610 閱讀 5161

題意:有n個立方體,每一面都有顏色,現在要用他們堆出高度盡量高的塔,條件是,兩個接觸的塊,他們的接觸面顏色要一樣,同時上面的塊重量要嚴格小於他下面的。

與lis思想一樣,題目給出的資料是按重量遞增的

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define pb push_back

#define cl(a,b) memset(a,b,sizeof(a))

#define bug printf("===\n");

#define rep(a,b) for(int i=a;i#define rep_(a,b) for(int i=a;i<=b;i++)

#define p pair

#define x first

#define y second

#define vi vector

const

int maxn=50002;

const

int inf=999999999;

typedef

long

long ll;

void max(int&a,int b)

int color[6];

char s[6][20]=;

int dp[maxn];

int f[maxn];

struct node

node(int a,int b,int c,int r):top(a),bom(b),weight(c),s(r){}

}p[maxn];

void out(int x)

int main()

for(int j=0;j<6;j++)else }}

cl(dp,0);

cl(f,-1);

int ans=0,index=0;

for(int i=0;ifor(int j=i+1;jif(dp[j]1&&p[j].weight>p[i].weight&&p[j].top==p[i].bom)

if(ansif (cas)

printf("\n");

printf("case #%d\n%d\n", ++cas, ans + 1);

out(index);

}return0;}

/*31 2 2 2 1 2

3 3 3 3 3 3

3 2 1 1 1 1

101 5 10 3 6 5

2 6 7 3 6 9

5 7 3 2 1 9

1 3 3 5 8 10

6 6 2 2 4 4

1 2 3 4 5 6

10 9 8 7 6 5

6 1 2 3 4 7

1 2 3 3 2 1

3 2 1 1 2 3

0*/

資料立方體

總體介紹 首先模擬乙個資料分析場景,某企業積累了如下 所示的銷售資料 中每一行表示某個時間段內某種商品在某個地區的銷售情況。很明顯,這些資料涉及到了時間 地區 產品三個業務角度。在對這樣的資料進行分析時,不同的角色都會基於自己所感興趣的業務角度提出問題 銷售經理關心各個地區的銷售情況,希望找出銷售增...

建立立方體

imanualobject cube cube scenemgr.createmanualobject cube cube.begin examples anchor operationtype.ot list 頂點 cube.position 100,100,100 0 cube.position...

資料立方體 解密

資料立方體和傳統資料庫的差別在於資料立方體即cube把很多原來要用資料庫的group by操作來達到的效果通過其獨有的儲存形式予以加速,使用者可以方便地下鑽,切面 看到各種聚合的資料的結果。試想一下,如果乙個cube擁有3個維度,為了計算在各個維度上的聚合,就要進行2 3次計算,如果有10個維度就要...