02 2012 档案
摘要:http://poj.org/problem?id=1860题意 : 就是套汇的问题,汇率Rab, 增加了一个手续费 Cab 。。。。。。。每次的结果是 (本金 - 手续费) * 汇率,而且一个人拥有的钱的类型是已知的,拥有的value 钱的个数也是已知的, 问你能不能增值。输入 :3 2 1 20.0 //钱种类个数 汇率的个数,拥有第几种钱, 拥有多少钱1 2 1.00 1.00 1.00 1.00 //钱a, 钱b, rab, cab, rba, cba2 3 1.10 1.00 1.10 1.00想法: 应用b...
阅读全文
摘要:大致题意:输入由p、q、r、s、t、K、A、N、C、E共10个字母组成的逻辑表达式,其中p、q、r、s、t的值为1(true)或0(false),即逻辑变量;K、A、N、C、E为逻辑运算符,K --> : x && yA --> : x || yN --> not : !xC --> implies : (!x)||yE --> equals : x==y问这个逻辑表达式是否为永真式。PS:输入格式保证是合法的 解题思路:p, q, r, s, t不同的取值组合共32种情况,枚举不同取值组合代入逻辑表达式WFF进行计算。如果对于所有的取值组合,WF
阅读全文
摘要:http://poj.org/problem?id=2506#include<stdio.h>#include<string.h>int a[260],b[260];char str[260][260];void add(){ int i,j,k; str[0][0]='1';//不要忘了0,我就贡献了一次wa str[0][1]='\0'; str[1][0]='1'; str[1][1]='\0'; str[2][0]='3'; str[2][1]='\0'; for(i
阅读全文
摘要:题目大意:某公司每个月都会盈利或者亏损,盈利的金额为s,亏损的金额为d,该公司每连续5个月报一次财政状况,即(1-5,2-6,3-7,4-8,5-9,6-10,7-11,8-12),这八次报账都显示公司为亏损,问,该公司年底最多能盈利多少,如果不能盈利输出Deficit。 分析:由于每5个月的报账都为亏损,所有连续的5个月里至少有1个月为亏损,则可能产生最优解的情况为如下4种 1 2 3 4 5 6 7 8 9 10 11 12 s s s s d s s s s d s s //每5个月里只有1个月亏损 s s s d d s s s d d s s //每5个月里只有2个月亏损 s...
阅读全文
摘要:#include<stdio.h>#include<string.h>#define N 1100int n,str[N],k[N],a[N];char p[N];void pown(){ int i,j,b[N],g; for(i=1;i<=N;i++){a[i]=0;} a[0]=1; for(g=0;g<n;g++) { for(i=0;i<N;i++) { b[i]=a[i]; a[i]=0; } for(i=0;i<N;i++) { for(j...
阅读全文
摘要:http://poj.org/problem?id=1328Slyar:说一下题意。假设有一条无限长的海岸线,海岸线以上部分有n个岛屿。在海岸线上有雷达,每个雷达能够探测的范围为半径为d的圆,当且仅当一个岛屿与雷达的距离小于等于d时,岛屿能被雷达探测到。给出所有岛屿的坐标和雷达的半径。求最少需要用多少个雷达,使得所有的岛屿都被探测到。求出每个岛屿对应圆心在x轴上的范围,对左坐标排序后贪心选择。类似于:数轴上有N个点,要用几个单位长度区间才能将它们全部覆盖?具体实现见代码注释。这次用到了C语言的库函数qsort,写cmp函数的时候要注意浮点数的比较。另外这个排序只需要考虑左坐标即可,因为就算左坐
阅读全文
摘要://位压缩加搜索枚举,用pre记录其前驱#include<stdio.h>#include<string.h>#define N 100000struct node{ int x,y,num,pre,step;}p[N*4];struct nn{ int x,y;}g[N*4];char str[10][10];int vis[N];int d[16]={ 0xf888,0xf444,0xf222,0xf111, 0x8f88,0x4f44,0x2f22,0x1f11, 0x88f8,0x44f4,0x22f2,0x11f1, 0x888f,0x444f,0...
阅读全文
摘要:每次改变相邻位置,求最少步数到全部一样。这种矩阵求最少步数到某一状态一般是考虑BFS了,然后就是怎么简化题目的问题,反正就w和b这2个状态,0和1也是2个状态,所以很容易想到了位运算,16个位置看成16个2进制位就好(目的就是全1或全0),题目要求相邻位置改变,最近看MFC的我马上想到了逻辑操作符...这里的情况是反转,所以用异或...所以算法就很容易了,提前打表求出每一位相邻位置改变后的值(把该位置连同相邻置1,其余位置置0),然后BFS就行了http://poj.org/problem?id=1753#include<stdio.h>#include<string.h&g
阅读全文
摘要:/*博弈问题,不过和其他博弈问题不同的是有了限制,所以这里用到了搜索 和记忆化搜索很像dfs()用来搜此点是否是必败点,(能够到达必败点的,一定是必胜点,只能到大必胜点的一定是必败点)运用递归,从孩子回溯到本节点判断是否为必败点*/#include<stdio.h>#include<string.h>char str[30];int num[40];int dfs(int a)//搜索是否为必败点{ if(a==31)return 1; for(int i=1;i<=6;i++) { if(num[i]&&a+i<=31) { num[i]-
阅读全文