//t4 可憐與超市
//long long!!!!我看到10的九次方了,我直接龍龍
//不對啊,b也小於10億啊,int就夠了
//我聰明的大腦瞬間看出,樹形dp
//題幹的意思是不是1就是根?應該是,但我覺得不穩
//f[u][0/1] 以u為根的子樹,u買或者不買的能購買的最多商品 最優解(之所以這麼定義因為跑不了10億乘5000)
//0是不買 帶點揹包思想,選課那種,這個注意
//f[u][0]+=(f[v][0])
//f[u][1]+=(f[v][1],f[v][0]) 最後輪一遍最優
//就這?????
//現在就是我不知道它是否會是乙個森林,或者就是以1為根
//這樣吧,我賭一把,1根,沒有森林
//不對,這樣還是不好做,我這個值沒法算啊
//要不還是一開始的思路,去算錢,然後再比
//關鍵, ....5000*5000能開嘛 ,是五千萬,應該可以,
//那行,改了改了,全改了
//f[i][j][0/1] 以i為根的子樹,買j件的最小價值 還是選課那個揹包思想,與i的兒子進行輪k
//那麼0 1 就表示用不用優惠劵 0是不用
//考完了我總結一下,就是:加權選課用上皇宮的狀態思想 嘶,你這麼一總結,這可真是一道好題,高低是把樹形整透了
#include #include #include #include using namespace std;
typedef long long ll;
const int mx=5000+10;
int n,len;
ll b;
int head[mx];
ll c[mx],d[mx];
ll f[mx][mx][2];
int size[mx];//這跟選課還有些不同,這我得開乙個記錄它的兒子個數
//額怎麼說,其實怎麼著都能寫,不過我覺得這種寫法還清晰一些
struct nodea[mx];
void insert(int u,int v)
void dfs(int u){
f[u][0][0]=0;
f[u][1][0]=c[u];
f[u][1][1]=c[u]-d[u];
// printf("1k f[%d][1][1]=%lld c[%d]=%lld d[%d]=%lld\n",u,f[u][1][1],u,c[u],u,d[u]);
size[u]=1;
for(int i=head[u];i!=0;i=a[i].next){
int v=a[i].to;
dfs(v);
//這個題的k的順序一直是無所謂的,當前處理的子樹拿出來的,從幾開始輪都行
//j的順序必須是這樣,如果是j-k,就是一開始就把總數算出了,其實就相當於乙個01揹包
//j是總容積,k每次填進去,它每次都是有一些從j-k更新的,如果從0到j,就是可能這個點前面
//已經用過了,我再後面又用了一次,點也是每次只能用一次 ,與dp無後效性相符
//如果是j+k,j+k每次從j更新,還是說它從小於它的更新,就得倒序,無後效性
//如果下標為負,它會根據你的陣列在記憶體的位置 更新你陣列裡的其它的值,
//如果在前面就run 後面就會w或者多跑了很多次導致t,這個注意
//關於當j-k 因為我們的答案j是從左右上來的
// 這麼說,當j=總時,k沒有選擇,只能全部奉上,其他都是無意義的;如果你進行j-k
// 當k不是size[v],就需要左邊付出更多,笑死,它根本沒有,從這裡理解它也是無意義的
// 然後有個細節就是k要大於j-kk,但你還是要跟0取個max,因為j也會變小
// k在右邊為了防止j-k<0 也要處理
//這個題是透的不能再透了
int kk=size[u];
size[u]+=size[v];
for(int j=size[u];j>=0;--j){
// j-k<=kk j-kk<=k
for(int k=max(0,j-kk
樹上揹包 可憐與超市
發現商品間的關係顯然是棵樹,所以做樹上揹包。發現商品的 都很高不能放在狀態裡,而價值都是1,所以轉換維度。定義 dp u j 0 1 為在 u 的子樹中選出 j 個物品所需要的最小 其中0代表不用優惠券買u,1代表用優惠券買u。轉移 sum sum dp u j k 1 min dp u j k 1...
HZOI 可憐與超市 樹形dp
學長留的題,質量還是灰常高的。而且我樹規本身較弱,一道也不想放下 題解 這道題我們可以看出是乙個樹形結構,而且是dp dp首先要定義狀態 設 dp i j 0 1 表示當前考慮到第i個物品 以i為根的子樹中 買了j個物品的代價,0表示不用i的優惠券,1表示使用 初始狀態 dp i 1 1 c i d...
可憐的硬碟
這兩天都在抽時間給同學看電腦問題,最後確定是硬碟出現嚴重壞道,前面5g的空間壞道嘩嘩一樣,不知道是怎麼用的。現在給他把壞道區域給遮蔽了,希望能堅持一段時間吧。劃分分割槽時使用了 diskgen這款國產軟體,指定乙個分割槽再修改柱面引數,十分的方便。遮蔽之前還搜尋過hddreg這款軟體,不過最後還是放...