上一页 1 ··· 15 16 17 18 19 20 21 22 23 ··· 30 下一页
摘要: 四道题的难度:2591#include #include #include #include using namespace std;const long maxn=10000001;long num[maxn];int two,three;int idx;void init(){ memset(num,0,sizeof(num)); idx=0; num[0]=0; two=three=0; for(int i=1;i#define Min(a, b) ((a)#include #include #include #include using namespace... 阅读全文
posted @ 2014-01-19 22:04 辰曦~文若 阅读(409) 评论(0) 推荐(0)
摘要: 水题,竟然花了那么多时间。。。主要是不知道为什么,明明在本机上编译过去了,但是用c++提交却编译错误。。。最后用g++提交AC题意:给出n个学生的名字,然后给出m个测验。 每个测验给出n个学生的分数。 当给出第i次测验的成绩,求Li Ming在所有学生中,前i次成绩总和的排名(若分数相同,则Li Ming排在第一个) 开始没仔细看题,以为对于每次测验,只要给出Li Ming在此次测验中的排名。 后来才知道,原来题目中有这么一句话: In the i-th line, you should give the rank of L... 阅读全文
posted @ 2014-01-18 18:21 辰曦~文若 阅读(273) 评论(0) 推荐(0)
摘要: 题意: 输入一个整数n,表示有n组测试数据, 每组第一行输入一个整数x表示该组测试一共有x页,接下来输入x行,每行表示一页, 每页或者以C开头(第一页都是以C开头),或者以E开头,中间用引号括起一段文字。 以C开头的末尾输入两个数字a,b表示该页完后可以跳转到第a页或第b页, 以E开头的末尾输入一个单词,或者是HAPPY或者是GRISLY(有且仅有一页以HAPPY结尾)。 现在要求你根据输入找出以第一页开头,以HAPPY结尾的路径,输出路径上每一页中间引号里面的内容,不包含引号。思路:建立树,用dfs深搜。 要注意的是数... 阅读全文
posted @ 2014-01-18 15:23 辰曦~文若 阅读(417) 评论(0) 推荐(0)
摘要: 题意: 今天是Ted的100岁生日。凑巧的是,他家族里面每个人都跟他同一天生日,但是年份不同。 现在只给出一些 父亲的名字,孩子的名字,以及孩子出生时父亲的年龄, 要求将Ted以外的家族成员按年龄降序排序,如果年龄相同,则按字母排序。思路:遍历树。 根据题意,可通过父子关系建立一个有权无向树,Ted作为树的根节点。通过从Ted所在节点开始遍历树,给每个节点赋值。 最后根据每个成员的年龄排序即可。 这里用到map,建立名字到编号的映射,从而获取一个人在树中的节点编号。#include #include #include #include #in... 阅读全文
posted @ 2014-01-18 14:10 辰曦~文若 阅读(600) 评论(0) 推荐(0)
摘要: 网上说是多重背包,因为要输出方案,还要记录下路径,百度一下题解就可以。自己做的时候,还没了解过多重背包,该题直接往完全背包思考了。咖啡的钱看作总的背包容量,1、5、10、25分别代表四种物品的重量,可以取多次,但是有限制数量。设dp[j]为咖啡的价格为j时,所能花费的最多钱币数此外建立一个二维数组num[j][i],表示咖啡的价格为j时,花费的第i种货币的个数状态转移方程:dp[j]=max(dp[j],dp[j-v[i]]+1)初始条件:dp[j]=-1,dp[0]=0; num[j][i]=0;若dp[j-v[i]]+1>dp[j],则 num[j][i]=num[... 阅读全文
posted @ 2013-12-11 21:52 辰曦~文若 阅读(648) 评论(0) 推荐(0)
摘要: 题意:给出两个数,n,m,问1~m中的数组成n,有多少种方法? 这题其实就相当于 UVA 674 Coin Change,求解一样 只不过数据很大,需要用到高精度运算。。。后来还看了网上别人的解法,是将大数转化成高位和低位两部分处理代码一:用数组存储数据的每个位#include #include #include #include using namespace std;const int maxn=1005;long long dp[maxn][41]; //增加一维存储每一位的数int n,k;int main() { while(scanf("%d%d",&n 阅读全文
posted @ 2013-12-08 16:27 辰曦~文若 阅读(259) 评论(0) 推荐(0)
摘要: 题意:有n个(n#include #include #include using namespace std;const int INF=0x3f3f3f3f;const int maxn=(1=s[i];j--){ if((s[i]|j)==j){ dp[j]=min(dp[j],dp[j-s[i]]+1); } } } printf("Scenario #%d:\n",q); printf("%d\n\n",dp[(1#inclu... 阅读全文
posted @ 2013-12-08 09:36 辰曦~文若 阅读(271) 评论(0) 推荐(0)
摘要: 题意:给出t组数据 每组数据给出n和m,n代表商品个数,m代表你所拥有的钱,然后给出n个商品的价值 问你所能买到的最大件数,和对应的方案数。思路: 如果将物品的价格看做容量,将它的件数1看做价值的话,那么用01背包就可以求的花费m钱所能买到的最大件数dp[m]。 但是题目还要求方案数,因此很容易想到再建立一个数组f[j],存储j元钱能买dp[j]个物品的方案数。 在求解01背包的过程中,要分两种情况讨论: 设当前所选的物品为i 1. 若选了物品i后,能买的件数比不选物品i的件数大,即dp[j-val[i]... 阅读全文
posted @ 2013-12-07 10:52 辰曦~文若 阅读(613) 评论(0) 推荐(1)
摘要: 这题和典型的01背包求最优解不同,是要求第k优解,所以,最直观的想法就是在01背包的基础上再增加一维表示第k大时的价值。具体思路见下面的参考链接,说的很详细参考连接:http://laiba2004.blog.163.com/blog/static/8835120220138611342496/http://hi.baidu.com/chenyun00/item/1c6c44318acc8bfaa88428c7#include #include #include #include using namespace std;const int maxn=101;const int maxv=100 阅读全文
posted @ 2013-12-05 20:25 辰曦~文若 阅读(282) 评论(0) 推荐(0)
摘要: 题意:给你n个硬币,和n个硬币的面值。要求尽可能地平均分配成A,B两份,使得A,B之间的差最小,输出其绝对值。思路:将n个硬币的总价值累加得到sum, A,B其中必有一人获得的钱小于等于sum/2,另一人获得的钱大于等于sum/2。 因此用sum/2作为背包容量对n个硬币做01背包处理, 所能得到的最大容量即为其中一人获得的钱数。#include #include #include #include using namespace std;const int maxv=100*250+5;const int maxn=105;int dp[max... 阅读全文
posted @ 2013-12-05 15:12 辰曦~文若 阅读(159) 评论(0) 推荐(0)
上一页 1 ··· 15 16 17 18 19 20 21 22 23 ··· 30 下一页