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