也是個方程
【問題描述】
已知 c 和a1,…,an全都是正整數,求滿足a1*b1+a2*b2+…+an*bn=c的非負整數解的組數。
【輸入】
第一行是 n 和c。
第二行是 n 個數,分別表示1,…, n a a。
【輸出】
輸出解的組數(結果對 999983 取模)。
【輸入樣例】
2 41 2
【輸出樣例】
3【資料規模】
30%的資料中n≤10,c≤100;
100%的資料中n≤100,c≤10^5。
【一句話題意】
題中貌似仍然只有一句話。。。
【考察知識點】
動態規劃
【思路】
這道題目比較糾結,一直想不到用無限揹包模型求解。
假設前i個數的和為j時,解的個數為f[j],則可以得到以下轉移方程(滾動陣列版):
f[j]:=f[j]+f[j-a[i]] (1<=i<=n,a[i]<=j<=c)
因為是無限揹包,所以要注意迴圈順序。
【提交過程】
wa=>ac
【時間複雜度】
o(n*c)
【**】?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//uses sysutils;
const
programname=
'muti'
;
var
i,j,k,n,m,l,r,s,t,x,y:
longint
;
a:
array
[
0..110
]
of
longint
;
f:
array
[
0..100100
]
of
int64
;
ans:
int64
;
c:
longint
;
procedure
pin;
var
i,j,k:
longint
;
begin
readln(n,c);
for
i:=
1
to
n
do
read(a[i]);
readln;
end
;
procedure
main;
var
i,j,k:
longint
;
begin
fillchar(f,sizeof(f),
0
);
f[
0
]:=
1
;
for
i:=
1
to
n
do
for
j:=a[i]
to
c
do
f[j]:=(f[j]+f[j-a[i]])
mod
999983
;
end
;
procedure
pout;
var
i,j,k:
longint
;
begin
writeln
(f[c]
mod
999983
);
end
;
begin
assign(input,programname+
'.in'
);
assign(output,programname+
'.out'
);
reset(input);
rewrite(output);
//time:=now;
pin;
main;
pout;
//writeln((now-time)*86400000:8:8);
close(input);
close(output);
end
.
方程也是類
輸入 檔名稱 sum123.cpp 作 者 林海雲 完成日期 2015年5月25日 版 本 號 v2.0 問題描述 設計一元一次方程類,求形如ax b 0的方程的解。例如 輸入3x 8 0時,輸出的方程的解為x 2.66667 再如 輸入5s 18 0時,輸出的方程的解為s 3.6 程式輸入 乙個一...
2 9 5 方程也是類
問題及 include using namespace std class cequation cequation cequation double aa,double bb istream operator istream in,cequation e ostream operator ostre...
《C 語言基礎》實踐參考 方程也是類
返回 賀老師課程教學鏈結 專案要求 專案5 方程也是類 設計一元一次方程類,求形如ax b 0的方程的解。例如 輸入3x 8 0時,輸出的方程的解為x 2.66667 再如 輸入5s 18 0時,輸出的方程的解為s 3.6 參考介面如下 參考 為 class cequation int main c...