附加題 DP題目

2021-09-06 07:01:58 字數 1223 閱讀 2049

題意:給你n個數a[n],求從中順序的選出k個數b[k],這k個數分別進行如下操作,sum = b[1]*1 + b[2]*2 + b[3]*3 + ...... + b[k]*k 求使得sum最小。才開始von給我說可能需要單調佇列優化,我看看了,用單調佇列做了一下。提交不對,一看狀態轉移方程推錯了。囧....後來一看這不是乙個很典型的狀態轉移方程式嗎。以前做過類似的題目

dp[i][j] = min(dp[i - 1][j],dp[i - 1][j - 1] + a[i]*j)

寫了個二維的,結果直接mle,這不科學,計算10^7次不會mle。於是就去優化。我們可以看出i由i-1推出,所以我們可以把j反向取,把i這一維省去。有點01揹包優化的感覺。

注意一下資料範圍:

#include #include #include #include #include #include #include #include #include #include #include #define cl(a,num) memset((a),(num),sizeof(a))

#define iabs(x) ((x) > 0 ? (x) : -(x))

#define min(a,b) (a) > (b)? (b):(a)

#define max(a,b) (a) > (b)? (a):(b)

#define ll __int64

#define inf 0x7f7f7f7f

#define mod 1073741824

#define lc l,m,rt<<1

#define rc m + 1,r,rt<<1|1

#define pi acos(-1.0)

#define test puts("<------------------->")

#define maxn 100007

#define m 500007

#define n 10007

#define k 1007

using namespace std;

//freopen("din.txt","r",stdin);

ll a[n];

ll dp[k];

int main()

/*for (j = 1; j < i && j <= k; ++j)*/}

printf("%i64d\n",dp[k]);

}return 0;

}

2019 11 28 函式附加題

本題要求實現乙個常用圓形體體積的計算器。計算公式如下 球體體積 v 3 4 r 3 其中r是球體半徑。圓柱體體積 v r 2 h,其中r是底圓半徑,h是高。圓錐體體積 v 3 1 r 2 h,其中r是底圓半徑,h是高。輸入格式 在每次計算之前,要求輸出如下介面 1 ball 2 cylinder 3...

附加題 走迷宮

白雪公主身陷在乙個m n大小的迷宮中,迷宮中的障礙物是不能通行的。迷宮中用s代表白雪公主的位置,用e代表出口,代表障礙物,代表可以通行的道路。白雪公主只可以向上 下 左 右四個方向行走,並且每一步只能走乙個單位的長度。現給定m,n以及迷宮的樣子,求解x走到出口的過程中最少需要改變行走方向幾次?如果x...

軟體附加題簡答

現在再增加一項個人的附加作業,每認真回答乙個問題附加2分,10分為上限。附加作業回答以下幾個問題 1.你認為本門課程需要在 進行改進,具體措施有哪些,包括 時間進度安排,專案難度等均可 每次作業給的時間很充足,但是需要使用的新的東西太多,基礎差的 像我 就算有心完成,也會有力不足的狀態 對於專案難度...