g. 4# 課題選擇 [ problem 4840
] [ discussion ]
description
matrix67 要在下個月交給老師 n
'>n
篇**,**的內容可以從 m
'>m
個課題中選擇。由於課題數有限,matrix67 不得不重複選擇一些課題。完成不同課題的**所花的時間不同。具體地說,對於某個課題 i
'>i
i,若 matrix67 計畫一共寫 x
'>
x 篇**,則完成該課題的**總共需要花費 ai∗
xbi'>ai∗x^bi
個單位時間(係數 a
i'>ai
和指數 b
i'>bi
均為正整數)。給定與每乙個課題相對應的 a
i'>ai
ai 和 b
i'>bi
bi 的值,請幫助 matrix67 計算出如何選擇**的課題使得他可以花費最少的時間完成這 n
'>n
篇**。
input
第一行用空格隔開的正整數 n
'>n
和 m'>m
,分別代表需要完成的**數和可供選擇的課題數。以下 m
'>m
行每行有兩個用空格隔開的正整數。其中,第 i
'>i
行的兩個數分別代表與第 i
'>i
個課題相對應的時間係數 a
i'>ai
和指數 b
i'>bi
。output
輸出完成 n
'>n
篇**所需要耗費的最少時間。
samples
input copy
10 3output2 11 2
2 1
19
hint∗4
1+1∗
12+2
∗51=
8+1+
10=19'>2∗4^1+1∗1^2+2∗5^1=8+1+10=1
。可以證明,不存在更優的方案使耗時小於 19。
【資料規模】
source
石光中學 2023年 泉州複賽模擬 普及組 day1
dp[i][j]表示前i個課題,分配j篇**的最少時間
dp[i][j] = min(dp[i][j], dp[i-1][k]+c[i][j-k])
其中c[i][j-k]意為第i個課題,寫j-k篇**的時間
#pragma gcc optimize(2)#include#define x first
#define y second
using
namespace
std;
typedef
long
long
ll;int
read()
while(ch>='
0'&&ch<='
9')
return x*f;
}const
int maxn=1e3+100;//
c[i][j]表示a[i]這個課題被選擇j次時對答案的貢獻.
ll c[maxn][maxn];
ll a[maxn],b[maxn],dp[maxn];
ll qpow(ll a,ll b)
a=a*a;
b/=2
; }
return
ans;
} int
n,m;
void
ini()
for(int i=1;i<=m;i++)
}}int
main()}}
cout
}
分組揹包 最佳課題選擇
題目描述 matrix67要在下個月交給老師n篇 的內容可以從m個課題中選擇。由於課題數有限,matrix67不得不重複選擇一些課題。完成不同課題的 所花的時間不同。具體地說,對於某個課題i,若matrix67計畫一共寫x篇 則完成該課題的 總共需要花費ai xbi個單位時間 係數ai和指數bi均為...
通天之分組揹包 分組揹包
本人水平有限,題解不到為處,請多多諒解 本蒟蒻謝謝大家 題目 傳送門 分組揹包的模板 偽 1 for int i 1 i 組數 i 6 7 直接套模板即可。code 1 include2 pragma gcc optimize 3 3const int n 1e5 10 4 using namesp...
luogu P1336 最佳課題選擇 揹包dp
題目描述 matrix67要在下個月交給老師n篇 的內容可以從m個課題中選擇。由於課題數有限,matrix67不得不重複選擇一些課題。完成不同課題的 所花的時間不同。具體地說,對於某個課題i,若matrix67計畫一共寫x篇 則完成該課題的 總共需要花費ai x bi個單位時間 係數ai和指數bi均...