上一页 1 ··· 46 47 48 49 50 51 52 53 54 ··· 56 下一页
摘要: 题意:有6种石头,价值分别是1,2,3,4,5,6 每种有若干,作为输入数据。问能否把这些石头按照价值均分?分析:多重背包问题。代码:View Code 1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 using namespace std; 5 const int MAXN = 60000 + 5; 6 int dp[MAXN], n[6]; 7 int main(){ 8 int i, j, k; 9 int cas = 0;10 while(scanf("% 阅读全文
posted @ 2013-02-13 18:37 ChrisZZ 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 题意:给出n枚硬币,每个硬币有自己的面值,将这些硬币均分,有时无法均分,求分出来的两份硬币的最小差值分析:统计总面值然后用总面值的一半作为背包容量,01背包。代码:View Code 1 #include <stdio.h> 2 #include <iostream> 3 #include <math.h> 4 #include <string.h> 5 using namespace std; 6 const int MAXN = 50000; 7 const int INF = 0x3f3f3f3f; 8 #define DEBUG 9 in 阅读全文
posted @ 2013-02-13 16:05 ChrisZZ 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 题意:HM先生喜欢吃汉堡,有两种汉堡,每种无限多个,吃完第一种的汉堡一个需要m时间,第二种需要n时间,HM先生饭量很大可以不停的吃,给定一个时间t,在t时间段内希望HM先生吃尽量多的汉堡,并且空余出来的时间要尽量少分析:是一个只有两种元素的完全背包问题。代码:View Code 1 #include <stdio.h> 2 #include <iostream> 3 #include <string.h> 4 using namespace std; 5 #define DEBUG 6 const int MAXN = 10000 + 10; 7 int d 阅读全文
posted @ 2013-02-13 15:12 ChrisZZ 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 题意:公园在(1,1)点,火车站在(n,m)点,你需要从公园走到火车站,前进时只能距离车站越来越近不能往回走~路上有些地方有障碍(unsafe)不能走,问总的路线有多少。简单的dp,不过dp我是写成函数而不是简答的数组,用a[i][j]=0表示可以走,a[i][j]=1表示不能走。递归调用时注意边界,不要越界。代码:View Code 1 #include <stdio.h> 2 #include <string> 3 #include <string.h> 4 #include <sstream> 5 #include <iostream 阅读全文
posted @ 2013-02-13 12:38 ChrisZZ 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 经典问题了,题意我就不叙述了(题目是中文的~)分析:dp[i][j]表示在第i行第j个位置上能取得的最大和,那么要从最后一行开始算起,到塔顶结束:dp[i][j] = a[i][j]+max(dp[i+1][j], dp[i+1][j+1]), 边界条件是dp[n][j] = a[n][j];代码:View Code 1 #include <stdio.h> 2 #include <iostream> 3 using namespace std; 4 #define DEBUG 5 const int MAXN = 100 + 5; 6 int a[MAXN][MAXN 阅读全文
posted @ 2013-02-13 11:41 ChrisZZ 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 题意:手中的硬币币值有1,5,10,25,50共5种,给定一个面值n,问把n兑换成硬币的方案总数是多少。分析:先打表,再输入输出。动态规划的简单题目,设dp[i]表示面值为i的情况下能兑换的种类,那么dp[i]=sigma(dp[i-v[j]]), j=0..4, v[j]={1,5,10,25,50};也就是,如果i大于v[j],说明能够用dp[i-v[j]]的方案再加上一枚面值为v[j]的硬币作为面值i的方案,不过这只是方案中硬币的数量多了一枚,题目中只是问方案数量,那么此时两者在方案数量上等价,那么方案总数上加上这一种情况就可以了。代码:View Code 1 #include < 阅读全文
posted @ 2013-02-13 11:25 ChrisZZ 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 题意:给定n个大写字母组成的字符串,选择尽量多的串,使得每个大写字母都能出现偶数次。分析:暴力枚举O(2n)不行。 采用密码学中的中途相遇攻击原理,用stl的map实现:先取得前一半的判断结果然后后一般在前一半的基础上判断代码:View Code 1 #pragma warning(disable:4786) 2 #include <stdio.h> 3 #include <map> 4 #define DEBUG 5 using namespace std; 6 7 const int MAXN = 24; 8 map<int , int>table; 9 阅读全文
posted @ 2013-02-12 19:06 ChrisZZ 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一个三维的由单位立方体组成的长方体,每个单位立方体有一个值,求这个大的长方体的一个子长方体,使得构成它的单位立方体对应的值之和最大。分析:这是经典问题从一维延伸到三维的情况。画图后就能解决~构造前缀和a[i][j][k]表示以它为右下角的立方体和,然后枚举,复杂度O(n6),这道题目肯定能过。代码:View Code 1 #include <stdio.h> 2 #include <algorithm> 3 using namespace std; 4 long long a[21][21][21]; 5 int main(){ 6 int cas, line 阅读全文
posted @ 2013-02-12 17:11 ChrisZZ 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 题意:给出平面上的n个点,找一个矩形,使得边界上包含尽量多的点。代码:View Code 1 #include <iostream> 2 #include <stdio.h> 3 #include <algorithm> 4 #define DEBUG 5 using namespace std; 6 struct ZZ{ 7 int x, y; 8 bool operator < (const ZZ& p) const{ 9 return x<p.x;10 }11 };12 int max(int a, int b){13 return 阅读全文
posted @ 2013-02-12 15:24 ChrisZZ 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 题意:斐波那契素数的概念:任取斐波那契数列中的某一项Fi,对于所有小于Fi的斐波那契数,如果Fi都和它互为质数,那么Fi是斐波那契素数。输入n,输出第n个斐波那契素数。分析:黑书上有这题的详细分析,大意是说从第5项开始下标为素数的斐波那契数一定是斐波那契素数。代码:View Code 1 #include <stdio.h> 2 #include <string.h> 3 const int MAXN = 250010;; 4 int prime[25010]; 5 bool isprime[MAXN]; 6 long double fib[MAXN]; 7 int m 阅读全文
posted @ 2013-02-12 11:47 ChrisZZ 阅读(172) 评论(0) 推荐(0) 编辑
上一页 1 ··· 46 47 48 49 50 51 52 53 54 ··· 56 下一页