也是個方程

2021-06-01 08:54:54 字數 4347 閱讀 7839

也是個方程

【問題描述】

已知 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]oflongint;

f:array[0..100100]ofint64;

ans:int64;

c:longint;

procedurepin;

var

i,j,k:longint;

begin

readln(n,c);

fori:=1tondo

read(a[i]);

readln;

end;

proceduremain;

var

i,j,k:longint;

begin

fillchar(f,sizeof(f),0);

f[0]:=1;

fori:=1tondo

forj:=a[i]tocdo

f[j]:=(f[j]+f[j-a[i]])mod999983;

end;

procedurepout;

var

i,j,k:longint;

begin

writeln(f[c]mod999983);

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...