題意:給你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.你認為本門課程需要在 進行改進,具體措施有哪些,包括 時間進度安排,專案難度等均可 每次作業給的時間很充足,但是需要使用的新的東西太多,基礎差的 像我 就算有心完成,也會有力不足的狀態 對於專案難度...