void-man

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

2011年5月8日

摘要: 给出几种硬币的价值以及他的数量,然后给出一个最大钱,问你所给的钱能组成1到最大钱的值有多少种?多重背包,直接套用多重的模版#include <stdio.h>#include <string.h>#define N 105#define M 100005#define MAX(a, b) (a > b ? a : b)int a[N], c[N], f[M];void Complete(int cost, int weight, int m){ for(int i = cost; i <= m; i++) f[i] = MAX(f[i], f[i - cos 阅读全文
posted @ 2011-05-08 23:31 void-man 阅读(299) 评论(0) 推荐(0) 编辑

摘要: 一根木棒受热会拱起来,现在给你原始长度和拱起来的弧形长度,然你算出鼓起的中点到水平的距离假设加热后的长度是L,原始是l,则角度a=L/R,R=l/(2*sin(a/2));然后得到2*L/l=a/sin(a/2)用二分求出a的值,最后用公式得出结果#include <iostream>#include <cmath>#include <algorithm>using namespace std;int main(int argc, char* argv[]){ double N,C,L; while(scanf("%lf%lf%lf",& 阅读全文
posted @ 2011-05-08 23:19 void-man 阅读(327) 评论(0) 推荐(0) 编辑

摘要: 三国志TimeLimit: 5000MS MemoryLimit: 32768 KbDescription 《三国志》是一款很经典的经营策略类游戏。我们的小白同学是这款游戏的忠实玩家。 现在他把游戏简化了一下,地图上只有他一方势力,现在他只有一个城池,而他周边有一些无人占有的空城,但是这些空城中有很着不同数量的同种财宝。我们的小白同学虎视眈眈的看着这些城池中的财宝。 按照游戏的规则,他只要指派一名武将攻占这座城池,里面的财宝就归他所有了。不过,一旦攻占领这座城池,我们的武将就要留守,不能撤回。因为我们的小白手下有无数的武将,所以他不在乎这些。 从小白的城池派出的武将,每走一公里的距离就要消耗一 阅读全文
posted @ 2011-05-08 23:00 void-man 阅读(295) 评论(0) 推荐(0) 编辑

摘要: 给出K,M,求最小的n使之M^n的第K位是7.大数相加,然后判断k位,仍用数组存储,一个元素存储一位View Code 1 #include <cstdio> 2 #include <cstdlib> 3 #include <iostream> 4 #include <string.h> 5 #include <math.h> 6 using namespace std; 7 int num[1000]; 8 int main() 9 {10 int k,m,n,len,i;11 while( scanf("%d%d&quo 阅读全文
posted @ 2011-05-08 18:05 void-man 阅读(263) 评论(0) 推荐(0) 编辑

摘要: 这两种办法在文章部分已经都有提及,基本思想都是大数相加,一种是字符串相加,一种是数组保存位数第一种,字符串相加直接用一个字符串相加函数,计算结果保存到字符串数组中View Code 1 string operator +(const string s1,const string s2) 2 { 3 string s; 4 int l1=s1.size(),l2=s2.size(),i,j; 5 int a[1100]={0},k=0; 6 for(i=l1-1,j=l2-1;i>=0||j>=0;i--,j--,k++) 7 { 8 if(i>=0) 9 a[k]+=(s1[ 阅读全文
posted @ 2011-05-08 15:38 void-man 阅读(1082) 评论(0) 推荐(0) 编辑

摘要: 大数的斐波那契数列,目前处理大数还不算顺手还要多练,大数的处理有多种办法一种是用字符串转换成整数一位一位的加,然后在转换成字符串返回,还有一种是用整形数组,根据题目的不同要求选择合适方法,比如这道题斐波那契数列,给出的是n,让你求第n项,我们可以用二维数组,fb[n][k]的值就是第n项第k位的数是多少这里可以直接用memcpy()函数,算的时候可以直接把后一项叠加到前一项上面,这样就不用计算时候用两项相加了View Code 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <iostream> 4 阅读全文
posted @ 2011-05-08 15:19 void-man 阅读(802) 评论(0) 推荐(0) 编辑

摘要: 此类问题一般常用的有两种算法,时间复杂度分别是O(n^2)和O(nlogn)第一种,普通算法,用一个标记数组标记包括当前数的最长序列的长度,然后往前递归寻找,此类方法这里不多说了文章的dp问题里已经用过多次了下面着重介绍一下一种省时但是不常用的算法,整体思想是DP+二分搜索,用一个b[k]=m 来标记k长度的最长序列下,最小的数是m,比如有一序列 5 3 7 4首先b[1]=5,初始化长度为1的序列就是第一个数,接下来到3的时候,3独立的长度为1的序列小于5,所以b[1]=3,那么b[2]=4 因为长度为2的序列有两个5-7,3-7,3-4,期中序列最大的数最小的就是4了因此,寻找大于当前数的 阅读全文
posted @ 2011-05-08 14:16 void-man 阅读(558) 评论(0) 推荐(1) 编辑

摘要: 题目大意就是,给出一个板子的长宽,如果一个板子可以放到另外一个上面(长宽均小于此块),那么可以认为此板子加工时候不话费时间if you have five sticks whose pairs of length and weight are (4,9), (5,2), (2,1), (3,5), and (1,4), then the minimum setup time should be 2 minutes since there is a sequence of pairs (1,4), (3,5), (4,9), (2,1), (5,2). 根据题意,把板子按照l的值进行从小到达排序 阅读全文
posted @ 2011-05-08 13:59 void-man 阅读(241) 评论(0) 推荐(0) 编辑