vijos1037 雙塔問題

2021-07-31 01:32:11 字數 670 閱讀 8961

題意:n個任意高度的水晶,建造兩座塔,選取任意快,使得塔盡量高,且塔相等

思路:分情況說:第i快石頭

1、不用:dp[i-1][j]

2、放在高塔上:dp[i-1][j-a[i]]+a[i]

3、放在低塔上並且放後不超過高塔:dp[i-1][j+a[i]]

4、放在低塔上超過了高塔:dp[i-1][a[i]-j]+j

**:

#include #define ll long long

#define inf 0x3f3f3f3f

#define maxn 2004

#define pair pair#define mem(a, b) memset(a, b, sizeof(a))

using namespace std;

int dp[102][maxn];

int h[maxn];

int n, t;

int f, t;

int main()

for (int i = 1; i <= n; ++i)

}if(dp[n][0] > 0) cout << dp[n][0] << endl;

else cout << "impossible\n" << endl;

return 0;

}

搭建雙塔(Vijos 1037)

2001年9月11日,一場突發的災難將紐約世界 中心大廈夷為平地,mr.f曾親眼目睹了這次災難。為了紀念 9?11 事件,mr.f決定自己用水晶來搭建一座雙塔。mr.f有n塊水晶,每塊水晶有乙個高度,他想用這n塊水晶搭建兩座有同樣高度的塔,使他們成為一座雙塔,mr.f可以從這n塊水晶中任取m 1 m...

vijos1037 搭建雙塔

題目 限制和答案,到底哪乙個應該是陣列下標 設f i j 為取到第i個水晶,高度差為j時的較高塔的最高高度 那答案的更新,分方和不放討論 一 不放,dp i j dp i 1 j 二 放 放的話,對答案影響有三種情況 1 放在較高塔上,dp i j dp i j h i h i 高度差增加h i 高...

搭建雙塔(vijos 1037)

2001年9月11日,一場突發的災難將紐約世界 中心大廈夷為平地,mr.f曾親眼目睹了這次災難。為了紀念 9?11 事件,mr.f決定自己用水晶來搭建一座雙塔。mr.f有n塊水晶,每塊水晶有乙個高度,他想用這n塊水晶搭建兩座有同樣高度的塔,使他們成為一座雙塔,mr.f可以從這n塊水晶中任取m 1 m...