1. 程式人生 > 其它 >Linux kernel panic解決方法

Linux kernel panic解決方法

傳送門

狀態轉移較易確認,需要注意的是記錄路徑的方法:定義二維陣列 pre:dp[i][j]時,它的上一朵花的位置。那麼在查詢路徑時就要層層向上搜尋(類似並查集的結構),找到每一朵花算在的瓶的位置。由於題目中美學值可能為負數,因此初始化需要置為一個負數,特殊項置 0 。

#include<iostream>
#include<cstring>
using namespace std;
int F, V, dp[107][107], pre[107][107], val[107][107], ans, foot[107];
int main(void)
{
    cin >> F >> V;
    
for (int i = 1; i <= F; i++) for (int j = 1; j <= V; j++) cin >> val[i][j]; for (int i = 1; i <= F; i++) for (int j = 1; j <= V; j++) dp[i][j] = -32767; for (int i = 1; i <= F; i++) dp[0][i] = 0; for (int i = 1; i <= F; i++) {
for (int j = i; j <= V - F + i; j++) { for (int k = i - 1; k <= j - 1; k++) { if (dp[i - 1][k] + val[i][j] > dp[i][j]) { dp[i][j] = dp[i - 1][k] + val[i][j]; pre[i][j] = k; } } } }
for(int i=F;i<=V;i++) if (dp[F][i] > ans) { ans = dp[F][i]; foot[F] = i; } for (int i = F; pre[i][foot[i]]; i--) foot[i - 1] = pre[i][foot[i]]; cout << ans << endl; for (int i = 1; i <= F; i++) cout << foot[i] << " "; return 0; }