2011年9月5日
摘要: UVA_331本来打算先用BFS找到最少的交换次数,但发现情况种数太多,数组放不下,后来发现原来用冒泡法排序的过程对应的就是最少的交换次数。得到最少的交换次数之后,只要限定深搜的层数,然后递归寻找一共有多少种交换方案即可。#include<stdio.h>#include<string.h>#include<stdlib.h>int a[5],target[5],num,n,ans;void dfs(int cur,int p[]){ int i,k,q[5]; if(cur==num) { if(memcmp(p,target,sizeof(target) 阅读全文
posted @ 2011-09-05 18:12 Staginner 阅读(403) 评论(0) 推荐(0) 编辑
摘要: UVA_10344由于计算顺序已经给定了,那么便只需要依次枚举符号和符号后面ai的值即可,其中符号是可以重复使用的,但每个ai只能使用一次。当递归到所有ai都已使用时就检查计算结果是否为23即可。#include<stdio.h>#include<string.h>int a[10],vis[10];int dfs(int cur,int tot){ int i,j,t; if(cur==5) { if(tot==23) return 1; else return 0; } for(i=0;i... 阅读全文
posted @ 2011-09-05 16:27 Staginner 阅读(264) 评论(0) 推荐(0) 编辑
摘要: UVA_301 我们可以取一个数组p来记录列车到每一站时最多能容纳的乘客量,之后对输入的数据按起始车站升序排列,然后按顺序枚举每一个订单。如果当前订单的乘客量小于或等于列车到该站时能容纳的乘客量,则该订单可以被接受,更新p并进行递归即可。#include<string.h>#include<stdio.h>#include<stdlib.h>int n,d,s,ans;int begin[30],end[30],num[30],r[30];int cmp(const void *_p,const void *_q){ int *p=(int *)_p; in 阅读全文
posted @ 2011-09-05 01:13 Staginner 阅读(344) 评论(0) 推荐(0) 编辑