資料弱,樸素的演算法竟然過了,後來bitset位運算的01揹包優化加上後快了7倍//順便還練習了一下對拍
f【i】【j】=true,表示塔1高為i,塔2高為j,的情況存在
方程
if (dp[j][l])
樸素:
#include#includeusing namespace std;
int a[105],n;
bool dp[5000][5000];
int main()
} int ans;
for(ans=sum;ans>0;ans--)if (dp[ans][ans]) break;
if (ans)printf("%d",ans);else printf("impossible");
return 0;
}
bitset優化的
#include#include#include#include#includeusing namespace std;
int w[105],n,h[105],sum=0;
int main()
vijos 1037 搭建雙塔 DP
這題是小貓給我講的 題目 mr.f有n塊水晶,每塊水晶有乙個高度,他想用這n塊水晶搭建兩座有同樣高度的塔,使他們成為一座雙塔,mr.f可以從這n塊水晶中任取m 1 m n 塊來搭建。但是他不知道能否使兩座塔有同樣的高度,也不知道如果能搭建成一座雙塔,這座雙塔的最大高度是多少。所以他來請你幫忙。給定水...
搭建雙塔(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 高...