GZHUACM第二次周賽補C,D,F及完成的G

2021-09-05 01:32:00 字數 2193 閱讀 2119

c:hdu - 2602

d : hdu - 2546

理解01揹包遞迴公式,dp(k,v)=max(dp(k-1,v),dp(k-1,v-v[i])+v[i])

看一下ac過的c的**

#include#includeusing namespace std;

const int n = 1e3 + 10;

int w[n], v[n], dp[n];

int main()

memset(dp, 0, sizeof(dp));//這裡是按位歸0,上面是int位歸零一次

int n, v;

cin >> n >> v;

for (int i = 1; i <= n; i++)

for (int i = 1; i <= n; i++)

for (int i = 1; i <= n; i++)

}cout << dp[v] << endl;

}}

後面v代入體積,w為單個體積,v為單個價值,理解不了可以套進去。

對比d的**

#include#includeusing namespace std;

int n, m;

int v[1051] ;

int s[1051] ;

int main()

sort(v + 1, v + n+1);

cin >> m;//錢

if (m < 5)cout << m << endl;

else

}cout << m-s[w]-v[n] << endl;

} }}

在這裡區別就是最大體積要忽略一開始的最大的5塊錢,因為這五塊錢可以溢位,減了5塊之後就可以按照01揹包做了,結果把情況弄清楚就行

最小公倍數求法

先從歐幾里得演算法(輾轉相除法)開始求出最大公因數

歐幾里得演算法

兩個數中用小數去%大數,即假設a>b,r=a%b

讓a=b,b=r,做乙個迴圈,直至b==0時a就是最大公因子

最小公倍數求法

可以由最小公倍數*最大公因子=兩數積求得

問題分析

這裡有乙個對於我來說是坑的地方,就是後面備註那個

上ac**

#include#includeusing namespace std;

const int n = 1e3 + 10;

int p[n] = ;

int ou(int a/*大*/, int b)

return a;

}int main()

sort(p, p + m);

for (int i = 0; i < m-1; i++)//讓後乙個成為最小公倍數

cout << p[m - 1] << endl;

}}

注意那一點就ok

可以用快速冪,不過有規律也能乾掉他,這裡用的是規律(下面加上了快速冪做法)

直接**

#include#includeusing namespace std;

//tle

int main()

if (s==3)

if (s==7)

if (s==8)

if (s==4)

if (s==9)

}}

由於時間限制所以用迴圈做會tle

快速冪**

#includeusing namespace std;

int fast(int n,int mod)

b /= 2;//當b多除乙個2,就可以乘回去,不過這個2由指數運算可乘進a中

a = (a*a) % mod;

} return sum;

}int main()

}

這裡放乙個寫的很好的部落格鏈結

介紹快速冪,挺詳細的/侵刪

第二次周賽題解

e題,不懂的看新生訓練題解 includeint main return 0 d題,乙個預處理就ok includeint a 1000005 int main int t scanf d t while t return 0 c題,打表找下規律,會發現是以1 1 2 0 2 2 1 0為迴圈 in...

第二次周賽B

有乙隻經過訓練的蜜蜂只能爬向右側相鄰的蜂房,不能反向爬行。請程式設計計算蜜蜂從蜂房a爬到蜂房b的可能路線數。其中,蜂房的結構如下所示。input 輸入資料的第一行是乙個整數n,表示測試例項的個數,然後是n 行資料,每行包含兩個整數a和b 0sample input 21 2 3 6sample ou...

第二次周賽Problem C

在2 n的乙個長方形方格中,用乙個1 2的骨牌鋪滿方格,輸入n 輸出鋪放方案的總數.例如n 3時,為2 3方格,骨牌的鋪放方案有三種,如下圖 輸入資料由多行組成,每行包含乙個整數n,表示該測試例項的長方形方格的規格是2 n 0題解 列出1 1,2 2,3 3,4 5,5 8可以看出a n a n 1...