上一页 1 ··· 3 4 5 6 7 8 9 下一页
摘要: 例题代码是c++,看起来实在不习惯。还是用我的c写舒服。题意:突击队 你有n个部下,每个部下需要完成一项任务。第i个部下需要你话b[i]分钟交代任务然后他会立刻独立地、无间断地执行j[i]分钟后完成任务。你需要选择交代任务的顺序,使得所有任务今早执行完毕(即最后一个执行完的任务尽早结束)。注意,不能同时给两个部下交代任务,但部下们可以同时执行他们各自的任务。#include#include#define max(a,b) (a)>(b)? (a):(b);struct Node{ int b,j;}J[1005];int cmp(const void*a,const void*b)... 阅读全文
posted @ 2014-04-06 11:25 keyboard3 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 最近再开刘汝佳的算法竞赛入门经典,用它来练题。1.1思维的体操题意: 勇者斗恶龙 你的王国立有一条n个头的恶龙,你希望雇一些骑士把它杀死(即砍掉所有头)。村里有m个骑士可以雇佣,一个能力值为x的骑士可以砍掉一个直径不超过x的头,且需要支付x个金币。如何雇佣骑士才能砍掉恶龙的所有头,且需要支付的金币最少?注意,一个骑士只能砍一个头(且不能被雇佣两次)贪心排序:#include#include/*因为用到了sort*/using namespace std;const int maxn=20000+5;int A[maxn],B[maxn];int main(void){ int n,... 阅读全文
posted @ 2014-04-06 10:44 keyboard3 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 蛋都疼了,高了半天,Output Limit Exceeded原来是输入的问题,我靠!!以后还是用输入输出c++好,这尼玛!!郁闷!!!!!#include#include#includeusing namespace std;int main(){ int CA; cin>>CA; while(CA--){ char str[106],*start; int t,n,i,j,len,flag,h; start=&str[4]; scanf("%s %d",start,&n); le... 阅读全文
posted @ 2014-04-04 16:32 keyboard3 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 01背包加变形 动态规划的时候就犯浑了,每个状态都要记录的,我却只记录了当前状态的!!#include#includeint max(int a,int b){ return (a) > (b) ? (a) : (b);}int a[12],b[12],M,dp[12][100010];int main(){ int N,i,j,k,ma; while(scanf("%d",&M)!=EOF) { scanf("%d",&N); ma=0; for(i=1;i=k*b[i]) dp[i][j]... 阅读全文
posted @ 2014-04-02 18:17 keyboard3 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 想多了!以为一直dfs所有的情况会超时,所以直接忽略了,就自己想了一个优化的算法,最后测试结果对了,但是wa了,自己写算法很容易考虑不周的,还是在最后没有办法的时候在考虑自己的算法吧!!!简单的dfs就可以了!#include#include#define Max 100char goal_str[Max];char source_str[Max];char stack[Max];int path[Max];int lenth,top,pointer;void print_path(void){ int i; for(i=0;i0&&stack[top-1]==goal_str 阅读全文
posted @ 2014-03-31 21:59 keyboard3 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 就是套了个prim算法就ac了#include #include #define MaxInt 0x3f3f3f3f#define N 510/*创建map二维数组储存图表,low数组记录每2个点间最小权值,visited数组标记某点是否已访问*/int map[N][N],low[N],visited[N];int n;int prim(){ int i,j,pos,min,result=0; memset(visited,0,sizeof(visited));/*从某点开始,分别标记和记录该点*/ visited[1]=1;pos=1;/*第一次给low数组赋值*/ ... 阅读全文
posted @ 2014-03-30 17:35 keyboard3 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 其实就是一个拓补排序。(动态记录第i个之上的j存不存在,反过来就是第j个之下的i)首先确立每个框的位置(题目明确说了每一边都不会被完全覆盖)。/*可以通过搜索,搜索到该框的所有四个角*/||如果题目要求在严格一点,这个题目难度几何增加,在一定范围内是可算顺序的。检查边框的位置如果不是原来的字母,则说明原来的字母被现在的字母覆盖,得到一个局部大小关系(计算第j个下i的数量,0的话就确定下来这个j的位置了),接下来的就是拓补排序了。值得一提的是如果有多种可能的话,要按字典顺序逐个输出。(隐含的就是在循环遍历,默认条件就是字典顺序)#include#includeint topo[26][26];c 阅读全文
posted @ 2014-03-28 20:02 keyboard3 阅读(328) 评论(0) 推荐(0) 编辑
摘要: 这道题困扰我的不是算法问题。而是细节问题。不优化一直搜到底 时间是690ms左右没有优化的dfs#include#include#includechar map[10][10]; int flag[10][10]; int way[4][2]={ 0,1,0,-1,1,0,-1,0 }; typedef struct { int x,y; } point; point sta; int n,m; int t; int dfs( int s,int x,int y ) { int i,xx,yy; if( map[x][y]=='D' && s==... 阅读全文
posted @ 2014-03-26 17:25 keyboard3 阅读(172) 评论(0) 推荐(0) 编辑
摘要: #include#includeint a[1000005];int main(void){ int t,n,m,i,len,max,min,mx,mi; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); len=0; max=0;mi=1000005,mx=0,min=0; for(i=0;ilen) { mi=len; if(a[i]>n/2... 阅读全文
posted @ 2014-03-25 16:35 keyboard3 阅读(129) 评论(0) 推荐(0) 编辑
摘要: #includeint main(void){ int kil; int flag=0; double sum; while(scanf("%d",&kil)&&kil!=0) { sum=0; flag=0; while(kil) { if(kil<=4) { sum+=10; kil-=kil; } else if(kil<=8) { ... 阅读全文
posted @ 2014-03-25 15:33 keyboard3 阅读(124) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 下一页