10.21 打卡搜索。
来源:互联网 发布:淘宝运营助理工作总结 编辑:程序博客网 时间:2024/05/21 11:37
近期任务就是敲好暴力,调整状态。。。。
没有其他。
当然需要别的练练手,不然废了。
最近感觉自己把什么题都当模拟了。。。。。
上来就模拟。。。。。。。
从下午开始记得数吧、、
第一道:
poj 1416
切碎。数字段。
主要是要判断的调节比较细碎。。。。。看不懂提啊!
每次枚举合法的可以站在一起的数字。进行dfs。还是不行啊。。
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;//by mars_chchar s[15];int target,num,len;int ans[15],v[15];int res,cnt; bool flag=false;void dfs(int x,int y,int z){ if(x == len) //统计 { if(res<z) { res=z; num=y; for(int i=0;i<y;i++) { ans[i]=v[i]; } cnt=1; if(flag) flag=true; } else if(res == z) { cnt++; } } int sum=0; for(int i=x;i<len;i++) { sum=sum*10+s[i]-'0'; if(sum+z<=target) { v[y]=sum; dfs(i+1,y+1,sum+z); } else break; } } int main(){ while(scanf("%d%s",&target,s) && target!=0 && s[0]!=0) { len=strlen(s); cnt=0,res=0,num=0; flag=false; int p=0,sum=0; while(p<len) { sum=sum*10+s[p]-'0'; p++; } if(sum == target) { printf("%d %d\n",target,target); continue; } dfs(0,0,0); if(flag||(res == 0 && target!=0)|| res>target) printf("error\n"); else { if(cnt>1) printf("rejected\n"); else { printf("%d ",res); for(int i=0;i<num;i++) { if(i != num-1) printf("%d ",ans[i]); else printf("%d\n",ans[i]); } } } } return 0;}
第二道:
poj 1129
挺简单的一道搜索。。。。但是我竟然很想模拟。或者贪心【这个是错的】。
但是时间复杂度有点说不清。。。
所以 我们枚举当前用k个颜色染点能否ok,不ok就颜色num++。。
问题还是在于 dfs的递归不是很好?
WA了1次是输出没有加句号。。。。。打死我吧。。。
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;//by mars_chint n,ans;struct data{ int f,t,w,nxt;}e[10005];int first[10005],tot,col[10005];bool flag=false;void add(int a,int b){ e[tot].f=a; e[tot].t=b; e[tot].nxt=first[a]; first[a]=tot++;}bool judge(int x,int c){ for(int i=first[x];i!=-1;i=e[i].nxt) { if(col[e[i].t] == c) { return false; } } return true;}void dfs(int x,int num){ if(flag) return; if(x>=n) { flag=true; return; } for(int i=1;i<=num;i++) { if(judge(x,i)) { col[x]=i; dfs(x+1,num); //col[x]=0; } } if(!flag) { ans++; dfs(x,num+1); }}int main(){ while(scanf("%d",&n) && n!=0) { scanf("\n"); memset(first,-1,sizeof(first)); memset(col,0,sizeof(col)); for(int i=1;i<=n;i++) { char c; scanf("%c:",&c); int a=c-'A'; while(scanf("%c",&c) && c!='\n') { int b=c-'A'; add(a,b); } scanf("\n"); } ans=1; flag=false; dfs(0,1); if(ans == 1) printf("%d channel needed.\n",ans); else printf("%d channels needed.\n",ans); } return 0;}
0 0
- 10.21 打卡搜索。
- 打卡
- 打卡
- 打卡
- 打卡
- 打卡汇报
- 【9.28】打卡
- 【9.29】打卡
- 打卡阅读
- 09.27 打卡
- 10.26 打卡
- 开题打卡
- LeetCode打卡
- 暑假打卡
- 新人打卡
- 第二次打卡
- VBScript自动打卡
- 打卡:10 perl string
- 如何通过HttpURLConnection得到http 302的跳转地址
- Google GMS 下载
- 统计一下现有手机端关于智能电网的应用(苹果端)
- C语言作业|螺旋方阵
- QR code二维码简介及Qrencode库的移植与使用
- 10.21 打卡搜索。
- CIDR(构成超网)
- win32 SetTimer注意事项
- pip安装插件
- 一个草根程序员创业之路的所感所悟-2016
- AndroidStudio --> compileSdkVersion, minSdkVersion 和 targetSdkVersion
- 字符串拆分,根据指定分隔符拆分字符串
- 极光推送
- HashMap实现原理分析