UVa2017
文章平均质量分 70
howlowl
这个作者很懒,什么都没留下…
展开
-
【TLE与否】10123UVa不要歪——记忆化的重要性
参考了 http://www.cnblogs.com/staginner/archive/2011/12/21/2295362.html (他真是大神),然后自己写了一下。如果不用记忆化记下 行不通的状态转移路径(rest[st] == 0),就会超时!!!超时代吗:#include#include#includeconst int MAXD = 1100000;int bd原创 2017-09-28 17:02:23 · 189 阅读 · 0 评论 -
UVa10012箱子得有多大
看了别人的思路才知道特殊情况#include#include#includedouble radius[10];bool used[10];double centerpos[10]; //the position of circle's centerdouble radpos[10]; //radpos[i] = the radius of the circle hereint原创 2017-05-15 02:28:52 · 179 阅读 · 0 评论 -
[TLE剪枝]uva165邮票连续值
一开始不懂,参考了D_Double的博客才懂~~要先挑出k个面值,再找h张邮票的面值的最大连续取值!#include#includeint denomination[10];bool marksum[100000];int h,k;int maxsum;void sum(int* temp,int num,int nsum,int tl) //has chosen num ti原创 2017-04-18 02:24:07 · 210 阅读 · 0 评论 -
310UVaL系统——字符串字串
一开始看不懂题目,题意是要把w变成包含子串z的字符串!看懂了也没思路。。。看了http://www.cnblogs.com/staginner/archive/2011/12/29/2306838.html 大神的解释才明白,bfs隐式图搜索只要保存长度#include#include#include#includeusing namespace std;const int ma原创 2017-02-25 18:19:29 · 203 阅读 · 0 评论 -
196UVa电子表格
参考了别人的“没有必要进行拓扑排序”#include#include#include#includechar* sheet[1000][18300];char str[100];char ALPHA[27]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";char NUM[10]="123456789";int r,c;bool parse(char*& s,int原创 2017-02-03 04:05:32 · 261 阅读 · 0 评论 -
10305UVa给任务排序
就是拓扑排序#include#includeint n,m;int gra[110][110];int vis[110];int topo[110];int top;void dfs(int u){ vis[u] = 1; int v; for(v = 1; v <= n;v++) { if(gra[u][v] && !vis[v]) { dfs(v);原创 2017-02-02 04:37:09 · 228 阅读 · 0 评论 -
10596清晨漫步
注意:边数M为0(不连通!),需要特殊判断#include#includeint numn,nume;int gra[210][210];int d[210];void dfs(int u){ for(int v = 0; v < numn;v++) { if(gra[u][v]) { gra[u][v]--; gra[v][u]--; dfs(v);原创 2017-02-02 04:07:45 · 178 阅读 · 0 评论 -
10054项链
注意 端点相同的两条边可能重复出现、输出顺序!!#include#includeint gra[60][60];int d[60];int vis[60][60];int uu[1010];int vv[1010];int top;void dfs(int u){ int v; for(v = 1; v < 60;v++) { if(gra[u][v]) {原创 2017-02-02 03:05:10 · 313 阅读 · 0 评论 -
10129单词
欧拉道路的定义是: 除了起点和终点外,其他点的“进出” 次数应该相等。在无向图中,除了起点和终点外,其他点的度数应该是偶数。如果一个无向图是连通的,且最多只有两个奇点,则一定存在欧拉道路。如果有两个奇点,则一定从一个出发,在另外一个终止。如果奇点不存在,则可以从任意点出发,最终一定会回到该点。有向图欧拉道路:在‘忽略边的方向后,图必须是连通的’的前提下,最多有两个点的入度不等于出度,而且必原创 2017-02-01 21:43:52 · 237 阅读 · 0 评论 -
10422uvaFEN中的骑士
基本按照刘汝佳书的例题去解,WA了:step[front] >10 而不是 step[front]>=10,因为 走10步 可能有多种状态,不应马上return -1;#include#includeconst int maxstate=2000000;typedef int State[25];State que[maxstate];int step[maxstate];St原创 2017-02-23 19:09:40 · 285 阅读 · 0 评论 -
10047UVa独轮车
这题的关键之处:什么时候不能再重复访问某一格子?如何防止重复访问?#include#includechar ground[30][30];//GREEN BLACK RED BLUE WHITE 0 1 2 3 4//U R D L 0 1 2 3struct cldir{ int s[5][4]; cldir() { memset(s,0,sizeof(s)); }原创 2017-02-01 01:23:23 · 198 阅读 · 0 评论 -
439UVa骑士移动
visit数组不能用有多余的行 列#include#includeconst int MAXN = 8;int visit[MAXN][MAXN];int dist[MAXN][MAXN];int q[MAXN*MAXN];int dx[8]={-2,-2,-1,-1,+1,+1,+2,+2};int dy[8]={-1,+1,-2,+2,-2,+2,-1,+1};int bf原创 2017-01-31 03:01:29 · 191 阅读 · 0 评论 -
657UVa掷骰子(图)
dfsdice():将每一片骰子(*和X)编号成1,2,3....(此时X对应的dice[i][j] !=0)dfspot(): 访问没有访问过的X(访问过的X对应的dice[i][j]设为0),dice[i][j](对应的骰子)的点数加一。#include#includechar pic[60][60];int dice[60][60];int numdot[60];原创 2017-01-29 21:44:20 · 211 阅读 · 0 评论 -
10562UVa看图写树 RE
经历了一次无比弱智的runtime error#include#includechar lines[300][300];int findsub(int line,int f,int r);bool fits(char ch){ return ch>31 && ch<127 && ch!='-' && ch!='|' && ch !=' '&& ch!='\n'&&ch !='#';原创 2017-01-29 17:43:28 · 220 阅读 · 0 评论 -
10344UVA算23点
WA了几次#includeusing namespace std;#includeint arr[5];bool exist;void cal(int sum,int cur){ if(cur==5) { if(sum == 23) { exist = true; } return; } cal(sum+arr[cur],cur+1); cal(s原创 2017-02-14 04:30:13 · 243 阅读 · 0 评论 -
10603UVA倒水
参考的例题写的刘汝佳,就是把每个状态遍历一遍注意:bool operator{return pour > rhs.pour;}#include#includeusing namespace std;#include#includestruct st{ int water[3]; int pour; bool operator<(const st& rh原创 2017-02-22 23:45:31 · 163 阅读 · 0 评论 -
UVa苏丹的继承者
#include#includeint graph[8][8];int col[8];int tl;int biggest;void dfs(int row){ if(row == 8) { int sum = 0; for(int i=0; i < row; ++i) { sum += graph[i][col[i]]; } if(sum > bigg原创 2017-05-15 03:08:49 · 294 阅读 · 0 评论 -
UVa10001伊旬园
就是题目特别难懂#include#includeint left[8] = {0,0,0,0,1,1,1,1};int cell[8] = {0,0,1,1,0,0,1,1};int right[8] = {0,1,0,1,0,1,0,1};int newc[8];int autom;int len;char cnum[50];int target[50];int ans[原创 2017-05-15 17:09:36 · 248 阅读 · 0 评论 -
[TLE]10123UVa不要歪——其他博客的解法
#include #include #include #include using namespace std;int L, W, N, M;vector > LEFT, RIGHT, D;//int find_flag; pair path[128], pick[128];int check(int n) { double LL, LR, RL, RR; LL转载 2017-10-05 17:55:25 · 163 阅读 · 0 评论 -
埃及分数
#include#includeconst int N = 1000;int maxd;int ans[N];int v[N];int get_first(int a, int b){ int k = b/a; return k*a >= b ? k : k+1;} int gcd(int a, int b){ return b==0? a : gcd(b, a%b);转载 2017-09-20 18:04:14 · 531 阅读 · 0 评论 -
【TLE】10123UVa不要歪(贪心)
一个个放上去与一个个取下来并在判断木板是否平衡时无差别(都会达到相同的状态);#include#includeint bdlen;int bdwt;int numpk;int pos[30];int wt[30];int used[30];int ans[30];bool dfs(int cur, double left, double right){ if(cur原创 2017-09-17 13:31:08 · 236 阅读 · 0 评论 -
331UVA交换的方案数
先算出最小交换次数,再枚举交换方案,如3 2 1中,最小交换次数为逆序数3,则共有(len-1)^3种交换方案,如 000、010、101、111 (从0开始数,A0)交换次数为0,则需特殊处理!#include#includeint in[6];int len;int numsp;int count;void swap(int cur,int numsp,int* arr)原创 2017-02-14 18:49:22 · 197 阅读 · 0 评论 -
10344UVA算23点
这个方法0.33(一遍全排列一遍求“23”)比上次那个0.15(用next_permutation生成全排序,在递归求“23”)慢一点#include#includeint arr[5];bool used[5];bool sum23(int cur,int sum){ if(cur == 5) { if(sum == 23) return true; else r原创 2017-05-08 21:27:27 · 210 阅读 · 0 评论 -
求非空子集(定序)
#include#includeint n;int a[30];void notempty_subset(int cur){ int start = cur?a[cur-1]+1 : 0; for(int i=start; i < n; ++i) { a[cur] = i; for(int j = 0; j <= cur; ++j) { printf("%d ",原创 2017-05-08 20:49:26 · 404 阅读 · 1 评论 -
301UVA地铁运输
注意:人数限制是指从站到站的人数,不是站台上的人数#include#includeint cpct,numsta,numord;int maxmoney;int sta[10];int start[25];int end[25];int psg[25];void dfs(int order, int money){ if(money > maxmoney) { max原创 2017-05-08 18:42:25 · 169 阅读 · 0 评论 -
539UVA卡坦岛
还不知道对不对。。。因为uva的judge queue塞车了#include#includeint n,m;int gra[30][30];int maxlen;void dfs(int u,int len){ if(len > maxlen) { maxlen = len; } for(int v = 0; v < n; ++v) { if(gra[u]原创 2017-05-08 17:01:03 · 194 阅读 · 0 评论 -
639UVa棋盘放车
#include#includeint graph[6][6];int num;int maxnum;bool ok(int cur){ int x,y; x = cur/num+1; y = cur%num+1; while(graph[x][y]!=-1) { if(graph[x][y] == 1) return false; --x; } x =原创 2017-05-08 14:42:49 · 262 阅读 · 0 评论 -
{递归}埃及分数
按刘汝佳书上解法做的(注意递归什么时候结束)#include#includeint maxd;int ans[100];int temp[100];int smallestdeno(int a,int b){ int res = b/a; return res*a >= b?res:res+1;}int gcd(int a,int b){ return b==0转载 2017-05-07 18:22:22 · 290 阅读 · 0 评论 -
{递归}实现的next_permutation
#include#includechar s[51];char now[51];int sn;int cnt[30];bool dfs(int cur,bool origin){ if(cur == sn) { now[cur] = '\0'; if(origin) return false; else return true; //find the next on转载 2017-05-07 16:23:10 · 182 阅读 · 0 评论 -
【TLE剪枝】UVa208救火车
看完大神http://blog.csdn.net/shuangde800/article/details/7750427 的博客才知道TLE的原因:从1(firestation)出发的路,并不一定能到达火灾处!应该从1出发,只走能通向火灾处的路。#include#includeint tlroutes;int fire;int gra[25][25];bool connect原创 2017-05-16 02:37:20 · 216 阅读 · 0 评论 -
UVa140宽带
#include#includeint gra[30][30];int node[30];int numnd;int ndpos[30];int order[30];int minwid;int ans[30];char input[300];void dfs(int cur,int max){ if(cur == numnd) { if(max < minwid)原创 2017-05-15 23:01:33 · 228 阅读 · 0 评论 -
UVa193图染色
#include#includeint m,n,k;int graph[110][110];int node[110]; //0 for white, 1 for blackint maxblack;int ans[110];//try to 'blacken' all nodes from 0 to n-1void dfs(int cur, int black){ if(cu原创 2017-05-15 20:30:15 · 154 阅读 · 0 评论 -
327UVa计算简单C表达式
//expr:term+termTerm-termTerm:++alpha--alphaAlphaAlpha--Alpha++//token()函数读入term和紧跟的符号#include#includeenum tok{ PLUS='+',MINUS='-',NEXT='\n',END};int vars[26];int used[26];in原创 2017-01-28 16:31:43 · 225 阅读 · 0 评论 -
699UVa"\b"的问题
//printf(" \b");添上这一句后WA。\b无效?#include#includeconst int max = 200;int res[max];void tree(int pos);int main(){ // freopen("input.txt","r",stdin); int numcase = 1; int root; while(scanf("原创 2017-01-27 14:50:34 · 169 阅读 · 0 评论 -
193UVA图着色
一个个点按 染色、不染色 递归即可#include#includeint gra[110][110];int node[110];int ans[110];int nnode;int nedge;int max;void dye(int num,int col){ if(num ==1 + nnode) { if(col > max) { max = col转载 2017-02-22 18:08:59 · 188 阅读 · 0 评论 -
10098uva快速生成有序排列
#includeusing namespace std;#include#includechar str[20];char sorted[20];void permutation(int n,char* org,char* aft,int cur);int main(){ // freopen("input.txt","r",stdin); int numcase; sca原创 2017-02-10 01:46:17 · 170 阅读 · 0 评论 -
10001UVa伊甸园
大神用位运算实现的更简短:http://blog.csdn.net/mobius_strip/article/details/51123015#include#includeint l[8] ={0,0,0,0,1,1,1,1};int c[8] ={0,0,1,1,0,0,1,1};int r[8] ={0,1,0,1,0,1,0,1};int a[8];int res[原创 2017-02-18 04:05:07 · 191 阅读 · 0 评论 -
321UVA【错误原因】怕黑先生别墅找卧室
正确:#include#include//1:“move from one room to another”//2:“switch on a light” //3:“switch off a light” const int maxstate=300000; //30000const int maxhash=30000;typedef int State[10];int原创 2017-02-27 20:36:59 · 303 阅读 · 0 评论 -
167UVa八皇后——苏丹
之前几道题都做不出来#include#includeint board[8][8];int vis[3][20];int max;void search(int cur,int sum){ if(cur == 8) { if(sum>max) max = sum; return; } for(int i = 0; i < 8;i++) { if(vis[原创 2017-02-17 18:46:21 · 222 阅读 · 0 评论 -
11205UVa损坏的步数计
题目的编码方式codification 巧妙#include#includeint sym[110];int numdup[(1<<15)+10]; //记录同一push(bismark)时 哪些数出现过int p,n;int min;void minset(int sum){ int numones=0; for(int i=0; i < p; i++) { if((原创 2017-02-08 22:47:18 · 159 阅读 · 0 评论