CSUOJ 1336 Interesting Calculator(BFS+优先队列)
来源:互联网 发布:vnr更新网络 编辑:程序博客网 时间:2024/06/02 02:12
题目大意:输入两个数,总共有三大种可能到达的状态:1.第一个数后面添加一位数(0,1,2,3...9);2.第一个数+一个数(0,1,2,3...9);3.第一个数*一个数(0,1,2,3...9);
下面3行10列分别对应到达每种状态的花费,求从第一个数变到第二个数的最小花费和最小变换次数。
#include<stdio.h>#include<string.h>#include<queue>using namespace std;int m,n;int a[5][20];bool vis[100005];int count1,count2;struct node{int x;int cost;int step;friend bool operator<(const node a,node b){ //优先选择花费小的,若花费相同,则优先选择变换次数少的if(a.cost!=b.cost)return a.cost>b.cost;elsereturn a.step>b.step;}}cur,next;int judge(int k){int count=0;while(k){count++;k/=10;}return count;}void bfs(){memset(vis,false,sizeof(vis));priority_queue<node> q;cur.x=m;cur.cost=0;cur.step=0;q.push(cur);while(!q.empty()){cur=q.top();q.pop();if(vis[cur.x])// 此题的关键continue;vis[cur.x]=true;// 此题的关键 利用优先队列 标记当前这个数 费用最小的状态 过滤那些 费用大于它的同一状态if(cur.x==n){printf("%d %d\n",cur.cost,cur.step);return ;}for(int i=0;i<3;i++){for(int j=0;j<10;j++){count2=judge(cur.x);if(i==0&&count2<count1){next.x=cur.x*10+j;}else if(i==1){next.x=cur.x+j;}else{next.x=cur.x*j;}if(next.x>n)continue;if(!vis[next.x]){next.cost=cur.cost+a[i][j];next.step=cur.step+1;q.push(next);}}}}}int main(){int t=0;while(scanf("%d%d",&m,&n)!=EOF){t++;for(int i=0;i<3;i++){for(int j=0;j<10;j++){scanf("%d",&a[i][j]);}}count1=judge(n);printf("Case %d: ",t);bfs();}return 0;}
0 0
- CSUOJ 1336 Interesting Calculator(BFS+优先队列)
- CSUOJ 1336 Interesting Calculator spfa / 优先队列
- CSUOJ 1336 Interesting Calculator (spfa算法)
- CSU-1336--Interesting Calculator(bfs)
- CSUOJ优先队列
- CSU 1336: Interesting Calculator<BFS+优化><湖南省赛真题>
- Interesting Calculator (最短路,广搜+优先队列,dp)(简单题)
- CSUOJ 1726 你经历过绝望吗?两次!(BFS + 优先队列)
- CSU~1336: Interesting Calculator(spfa)
- CSU 1336: Interesting Calculator(BFS啊 湖南省第九届大学生计算机程序设计竞赛)
- Interesting Calculator
- Interesting Calculator
- CSU 1336 Interesting Calculator(spfa)
- CSU-1336: Interesting Calculator,最短路思想!
- 优先队列+BFS
- hdu1242优先队列BFS
- HDU4198-BFS+优先队列
- acmdream1191 bfs+优先队列
- OC学习
- 使用Httpclient向百度翻译提交POST请求 接受返回的JSON字符串 实现翻译功能(1)----程序实现原理
- 关于分别给子节点与父节点定义行高,在重写了CellRenderer后无法实现的问题
- Properties(配置文件夹)和打印(printStream)
- xilinx sdk malloc失败的问题
- CSUOJ 1336 Interesting Calculator(BFS+优先队列)
- Android中ProgressBar的简单使用
- Caused by: Action class [com.struts.action.LoginAction] not found 解决方法
- VS程序发布
- android复习路之类的加载篇
- SOLR:APACHE版solr环境搭建及作为Hbase二级索引使用
- 【C++】NULL指针、零指针、空指针、野指针
- PAT_乙级 1019 数字黑洞
- CSS揭秘--笔记--自适应内部元素