題意: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...