摘要: 题目大意:关于最大公约数(Greatest Common Divisor, GCD)的,直接照着题目说的做就可以了。 1 #include 2 3 int gcd(int a, int b) 4 { 5 return b == 0 ? a : gcd(b, a%b); 6 } 7 8 int main() 9 {10 int n;11 while (scanf("%d", &n) && n)12 {13 int g = 0;14 for (int i = 1; i < n; i++)15 for ... 阅读全文
posted @ 2013-09-07 21:28 xiaobaibuhei 阅读(165) 评论(0) 推荐(0)
摘要: 题目大意:Peter有n支烟,每k个剩下的烟头可以卷成一支新烟,问Peter能吸多少跟烟? 简单数学题。 1 #include 2 3 int main() 4 { 5 #ifdef LOCAL 6 freopen("in", "r", stdin); 7 #endif 8 int n, k; 9 while (scanf("%d%d", &n, &k) != EOF)10 {11 int ans = n, butt = n;12 while (butt >= k)13 {14 i... 阅读全文
posted @ 2013-09-07 20:22 xiaobaibuhei 阅读(136) 评论(0) 推荐(0)
摘要: 题目大意:有一根长l的木棍,有n个切割点要把这根木棍切成n+1段,知道n个切割点的位置。切割一段长度为d的木棍需要的花费为d,如一段长度为10的木棍,有3个切割点:2,5,7,如果按切割点位置从左到右进行切割,所需花费为10+8+5。找出合理的切割顺序使得花费最小。 想到了最优矩阵链乘...dp,使用自顶向下带备忘的dp方法,cost[left][right]记录切割从第left个切割点到第right个切割点所需的最小花费。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 int co... 阅读全文
posted @ 2013-09-07 15:40 xiaobaibuhei 阅读(281) 评论(0) 推荐(0)
摘要: 题目大意:一个潜水者去海底寻找金子,已知有n个有金子的地点,分别给出他们的深度和价值。但是由于潜水者只有一瓶氧气,所以他只能在海底呆有限的时间,问他如何才能在这有限的时间里获得尽可能多的金子,并打印出方案。 dp中的0-1背包问题,得到最大值后根据dp数组可得到解决方案。采用“后i个物品”的规划方向可以使打印方案变得简单一点,详见《算法竞赛入门经典》9.3节。 1 #include 2 #include 3 #include 4 using namespace std; 5 6 int d[35], v[35], dp[35][10000]; 7 vector ans; 8 9... 阅读全文
posted @ 2013-09-07 10:34 xiaobaibuhei 阅读(217) 评论(0) 推荐(0)