//一顆樹,邊是單向的,每個節點有一定的權值,要你從根節點走到葉子節點,走到第偶數節點時,使後面的權值和最小;走到第奇數節點時,使後面的權值和最大
//邊鍊錶儲存,並查集查詢根節點
//用val[i][0]表示第i個節點是偶數節點的值和val[i][1]表示第i個節點是奇數節點的值
//遞迴的計算,因為節點很多,所以要記憶化搜尋
#include #include#includeusing namespace std;
#define inf 1234567890
#define n 10005
#define m 500000
int n,m,t,sumf,tot;
int ans[n],next[n],f[n],val[n][2];
struct tnode
node[m];
void addedge(int u,int v)
int find(int x)
return r;
}void merge(int u,int v)
void init()
for(i=1; i<=n; i++) scanf("%d",&ans[i]);
for(i=tot=0; i=0;i=node[i].tot)
else
return 0;
}
hdu3779 記憶化搜尋
兩列火車入站,重新排列的車廂符不符合要求 記憶化搜尋,ans i j 記錄的是第一列火車的第i節和第二列火車的第j列在組合後的序列裡找不找的到 如果找的到就標記為1,因為是從前到後搜尋,所以在ans n m 1時,表示符合 include include includeusing namespace...
hdu1069 記憶化搜尋
此題思路還是比較清晰的,對於每個x,y,z,都會有三種情況,dp i 表示把第i個放在最下面得到的最大高度,狀態轉移方程為dp i max dp i dp j height 這裡的j要滿足能夠放在i上面,height為第i個矩形的高度 如下 include include include inclu...
hdu 1078 記憶化搜尋
hdu 1078 題意 每次可以朝乙個方向走k格,必須走到乙個數值比當前值大的點,問最多數值加起來能有多少,走到不能再走。一開始定義錯了,定義dp i j 為以 i,j 為終點時所能得到的最大值。dp i t dx j t dy max dp i t dx j t dy dp i j a i t d...