uva 374 Big Mod
赤裸裸的整數(shù)快速冪取模
#include <cstdio>
long long PowerMod(long long a, int b, int k)
{
long long tmp = a, ret = 1;
while (b)
{
if (b & 1)
ret = ret * tmp % k;
tmp = tmp * tmp % k;
b >>= 1;
}
return ret;
}
int main()
{
long long a;
int b, k;
while (scanf("%lld %d %d", &a, &b, &k) == 3)
printf("%lld\n", PowerMod(a, b, k));
return 0;
}
posted @
2009-03-15 10:58 sdfond 閱讀(1763) |
評(píng)論 (4) |
編輯 收藏
終于通了第三章。
這個(gè)題目我設(shè)的三維狀態(tài),dp[i][j][k]表示前i個(gè)歌曲放在前j個(gè)唱片中第j個(gè)唱片用了k分鐘的最大歌曲數(shù)。
轉(zhuǎn)移方程:dp[i][j][k] = max{ dp[i-1][j][k-w[i]] + 1, dp[i-1][j][k], dp[i-1][j-1][p] } p = 0...t
跟背包問(wèn)題差不多,就是加了一個(gè)唱片個(gè)數(shù)和容量的限制。三維狀態(tài)一維轉(zhuǎn)移,時(shí)間復(fù)雜度 O(n * m * t * t)
/*
ID: shyprom1
PROG: rockers
LANG: C++
*/
#include <cstdio>
int main()
{
freopen("rockers.in", "r", stdin);
freopen("rockers.out", "w", stdout);
const int N = 32;
int n, m, t, v, dp[N][N] = {0}, ans = 0;
scanf("%d %d %d", &n, &t, &m);
for (int i = 1; i <= n; i++)
{
scanf("%d", &v);
for (int j = 1; j <= m; j++)
{
for (int k = t; k >= 0; k--)
{
for (int p = 1; p <= t; p++)
dp[j][k] >?= dp[j-1][p];
if (k >= v)
dp[j][k] >?= dp[j][k-v] + 1;
}
}
}
for (int i = 0; i <= t; i++)
ans >?= dp[m][i];
printf("%d\n", ans);
return 0;
}
新學(xué)期開(kāi)始了,新的挑戰(zhàn)繼續(xù)。
這個(gè)博客主要會(huì)寫(xiě)一些算法的總結(jié),并且貼一些代碼,供自己收藏吧,呵呵。