動態規劃 試題收錄

2022-05-02 03:45:08 字數 1596 閱讀 2419

dp稀爛也不是一天兩天了

我覺得我很有必要把做(chao)過的dp記錄下來啊... ...dp這種精細的東西真是太玄妙了。

慢慢來吧。只有思維足夠強大,才足以見題拆題。

編輯中... ...

樹形dp:

1.機械人採集金屬

分析:設 f[i][j] 為:遍歷完j的子樹,且剩下i個回到j的最小代價。特殊的,f[0][i]表示用乙個機械人走完所有節點再回來的代價,原因是每個點都必須且只能轉移一種對答案貢獻的狀態。

那麼狀態轉移方程就要分兩類討論。

初始化:f[i][x]=sigma(f[0][son_i]);

維護:f[i][k]=min(f[i][k],f[i-j][son_i]+f[j][son_i]+j*edge_val;

想想真的很妙啊。

#include    #include    #include    #include    #include    #include    #include    #define ll long long int

#define ls (x << 1)

#define rs (x << 1 | 1)

using namespace std;

const int n = 100010;

struct nodee[n];

int n,s,k,tot,head[n];ll f[21][n];

int gi()

while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();

return x*res;

}ll gl()

while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();

return x*res;

}inline void link(int u,int v,ll w)

; head[u]=tot;

}inline void dfs(int x,int fa)

}}int main()

while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();

return x*res;

}void pui(int x)

ll gl()

while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();

return x*res;

}inline void work1()

while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();

return x*res;

}void pl(ll x)

void pc()

ll gl()

while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();

return x*res;

}ll qpow(ll d,ll z)

int main()

pl(ans2);pc();pl(ans1);pc();pl(((m-ans1-ans2-1)%mod+mod)%mod);

return 0;

}

DP問題集 動態規劃試題

1.揹包問題 給定n種物品和一揹包。物品i的重量是wi,其價值為pi,揹包的容量為c。問應如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大?分析 每個物品只有兩種選擇,要麼就是塞到包裡面,要麼就是不要了 當揹包剩餘容量為j時,如果第i件物品重量wi j時,必定是要不了的,如果wi 假設剩餘容量...

歷屆試題 波動數列 (動態規劃)

問題描述 觀察這個數列 1 3 0 2 1 1 2 這個數列中後一項總是比前一項增加2或者減少3。棟棟對這種數列很好奇,他想知道長度為 n 和為 s 而且後一項總是比前一項增加a或者減少b的整數數列可能有多少種呢?輸入格式 輸入的第一行包含四個整數 n s a b,含義如前面說述。輸出格式 輸出一行...

面試題,硬幣 動態規劃

題目描述 給定數量不限的硬幣,幣值為25分 10分 5分和1分,編寫 計算n分有幾種表示法。結果可能會很大,你需要將結果模上1000000007 示例1 輸入 n 5 輸出 2 解釋 有兩種方式可以湊成總金額 5 55 1 1 1 1 1 示例2 輸入 n 10 輸出 4 解釋 有四種方式可以湊成總...