首页 > 代码库 > 湖南省第九届大学生程序设计竞赛
湖南省第九届大学生程序设计竞赛
I Interesting Calculator
CSU 过了 TOJ超时了 先记一下
#include <cstdio> #include <cstring> #include <queue> using namespace std; int a[100]; bool b[100010]; int c[100010]; int d[100010]; int x, y; int cas = 1; struct node { int x, t, tt; node(){} node(int x, int t, int tt) : x(x), t(t), tt(tt){} bool operator < (const node& rhs) const { if(t != rhs.t) return t > rhs.t; return tt > rhs.tt; } }; void BFS() { memset(b, false, sizeof(b)); priority_queue <node> Q; Q.push(node(x, 0, 0)); while(!Q.empty()) { node u = Q.top(); Q.pop(); //printf("%d\n", u.x); if(u.x == y) { printf("Case %d: %d %d\n", cas++, u.t, u.tt); return; } int sum = u.x; for(int i = 0; i < 30; i++) { int s = -1; if(i < 10) s = sum*10 + i; else if(i < 20) s = sum + (i-10); else if(i != 21) s = sum * (i-20); if(s < 0 || s > y) continue; if(!b[s] || c[s] > u.t + a[i] || (c[s] == u.t + a[i] && d[s] > u.tt+1)) { b[s] = true; c[s] = u.t+a[i]; d[s] = u.tt+1; Q.push(node(s, u.t+a[i], u.tt+1)); } } } } int main() { while(scanf("%d %d", &x, &y) != EOF) { for(int i = 0; i < 30; i++) scanf("%d", &a[i]); BFS(); } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。