06 2011 档案
摘要:问题描述:有一个天平和20个砝码,砝码的重量分别为1, 3, 9, 27,...,3^19,要求合理地把其中某些砝码放到天平的两边,测量出给定物体的重量w(1<w<(3^20-1)/2),待测物体放置在天平的左侧。分析左侧砝码总重+物体重量=右侧砝码总重物体重量=右侧砝码总重-左侧砝码总重所以,问题可以转化为:给出正整数w,对3^i(0<=i<=19)加上权值s (s=-1,0或者1),使得所有项的总和为w。s=-1对应于砝码放在天平左侧,s=1对应于砝码放在天平右侧,s=0对应于不使用该砝码。列举前10项的情形如下:通过观察,这个表格和基数为3的“进位制”问题很像(如
阅读全文
摘要:///一个点的坐标只有四种可能,用0表示 偶数,1表示奇数 ,则四种可能为(0,0),(0,1) ///(1,0),(1,1)。观察公式A=|x1y2 - y1x2 + x2y3 - y2x3 + x3y1 - y3x1|/2,仔细分析之后 ///可以得到A要为偶数,那么三个点的坐标中至少要有两个点的类型一样,这样就可以将问题的 ///复杂度降到O(1)了。 #include<stdio.h> int main() { int cas,t=1; scanf("%d",&cas); while(cas--) { printf("Scenario
阅读全文
摘要:#include<iostream>#include<algorithm>using namespace std;//int edge[110][110];int flag[110];int p[110];struct node{ int start; int end; int cost;};node edge[10010];int cmp(const node& c,const node& d){ return c.cost<d.cost;}int FindSet(int x){ int temp=p[x]; if(x!=p[x]) p[x]=F
阅读全文
摘要:#include "stdio.h"#include "stdlib.h"#define HASHSIZE 5struct Node{ int k; struct Node *next;};struct Node T[HASHSIZE];//初始化哈希表void InitHash(){ for(int i=0;i<HASHSIZE;i++) { T[i].k=i; T[i].next=0; }}//打印void PrintHash(){ for(int i=0;i<HASHSIZE;i++) { printf("%d:",
阅读全文
摘要:prim算法不仅仅可以求最小生成树,也可以求“最大生成树”。最小割集Stoer-Wagner算法就是典型的应用实例。 求解最小割集普遍采用Stoer-Wagner算法,不提供此算法证明和代码,只提供算法思路:1.min=MAXINT,固定一个顶点P2.从点P用“类似”prim的s算法扩展出“最大生成树”,记录最后扩展的顶点和最后扩展的边3.计算最后扩展到的顶点的切割值(即与此顶点相连的所有边权和),若比min小更新min4.合并最后扩展的那条边的两个端点为一个顶点(当然他们的边也要合并,这个好理解吧?)5.转到2,合并N-1次后结束6.min即为所求,输出min// 2914.cpp : 定义
阅读全文

浙公网安备 33010602011771号