srm 556
来源:互联网 发布:js onclick传参 编辑:程序博客网 时间:2024/06/11 16:24
欢迎点此阅读QvQ
250
Description
一个点数为
Solution
注意权值为
Code
#include <bits/stdc++.h>using namespace std;#define pb push_back#define mp make_pair#define F first#define S secondtypedef long long LL;typedef pair<int, int> pii;const int N = 50, M = 1024;bool d[N][N], f[N][M];queue<pii> Q;struct XorTravelingSalesman { int maxProfit(vector <int> a, vector <string> s) { int n = a.size(); for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) if (s[i][j] == 'Y') d[i][j] = 1; int mx = a[0]; f[0][a[0]] = 1; Q.push(mp(0, a[0])); while (Q.size()) { pii t = Q.front(); Q.pop(); for (int i = 0; i < n; ++i) if (d[t.F][i] && !f[i][t.S ^ a[i]]) { f[i][t.S ^ a[i]] = 1; Q.push(mp(i, t.S ^ a[i])); mx = max(mx, t.S ^ a[i]); } } return mx; }};
500
Description
你手头上有一个数
Solution
观察到,这个过程前
考虑数位dp,
我们发现每次转移这个数可以通过放到最左或最右来转移,直接dp即可
我的大小关系
* (1): 3 “>=”
* (2): 2 “>”
* (3): 1 “=”
* (4): 0 任意状态
感觉写的挺烦的,非常愚蠢….
Code
#include <bits/stdc++.h>//dpusing namespace std;#define pb push_back#define mp make_pair#define F first#define S secondtypedef long long LL;typedef pair<int, int> pii;const int N = 55;int n, A[N], B[N];//3: >=//2: > //1: = //0: anystring f[N][N][N][4], inf;struct LeftRightDigitsGame2 { string dp(int p, int l, int r, int fl) { string &tmp = f[p][l][r][fl]; if (tmp != "!") return tmp; tmp = ""; string x = string(1, (char)(A[p] + '0')); if (l == r) { if (fl == 3 && A[p] >= B[l]) return tmp = x; if (fl == 2 && A[p] > B[l]) return tmp = x; if (fl == 1 && A[p] == B[l]) return tmp = x; if (fl == 0) return tmp = x; return tmp = ""; } string t1 = inf, t2 = inf, t; if (fl >= 2) { if (A[p] > B[l]) { t = dp(p - 1, l + 1, r, 0); if (t != "") t1 = min(t1, x + t);//(l + 1, r) } else if (A[p] == B[l]) { t = dp(p - 1, l + 1, r, 2); if (t != "") t1 = min(t1, x + t); } t = dp(p - 1, l, r - 1, 2); //(l, r - 1) if (t != "") t2 = min(t2, t + x); if (A[p] > B[r]) { t = dp(p - 1, l, r - 1, 1); if (t != "") t2 = min(t2, t + x); } } if (fl & 1) { if (A[p] == B[l]) {//(l + 1, r) t = dp(p - 1, l + 1, r, 1); if (t != "") t1 = min(t1, x + t); } if (A[p] == B[r]) {//(l, r - 1) t = dp(p - 1, l, r - 1, 1); if (t != "") t2 = min(t2, t + x); } } if (!fl) { t = dp(p - 1, l + 1, r, 0); if (t != "") t1 = min(t1, x + t); t = dp(p - 1, l, r - 1, 0); if (t != "") t2 = min(t2, t + x); } tmp = min(t1, t2); if (tmp == inf) tmp = ""; return tmp; } string minNumber(string a, string b) { int n = a.size(); for (int i = 0; i < n; ++i) { inf += "9"; for (int j = 0; j < n; ++j) for (int k = 0; k < n; ++k) for (int l = 0; l < 4; ++l) f[i][j][k][l] = "!"; } for (int i = 0; i < n; ++i) A[i] = a[i] - '0', B[i] = b[i] - '0'; string ans = dp(n - 1, 0, n - 1, 3); if (ans == inf) ans = ""; return ans; }};
0 0
- srm 556
- Topcode SRM 556
- srm 556 div2
- SRM 556 Div1 500
- srm
- SRM 556 DIV2 解题报告
- 【水题】TopCoder——SRM 556 ChocolateBar
- 【搜索+图论】TopCoder SRM 556 XorTravelingSalesman
- srm 556 div1 500 LeftRightDigitsGame2(DP)
- topcode srm SRM 557
- SRM 443
- SRM 442
- SRM 439
- SRM 438
- SRM 444
- SRM 434
- SRM 445
- SRM 426
- [SQLServer] 50种方法优化SQL Server数据库查询
- SpringMvc中的开启注释(整理)
- 写点总结
- 漫谈程序员(八)阿里巴巴集团合伙人花名单
- iOS 解决UITabBarItem选中图片默认为蓝色的方法
- srm 556
- pure-ftpd 虚拟用户连接报错Sorry, invalid address given
- 读《50 Android Hacks》笔记整理Hack 1~Hack 8
- c++-----强制类型转换
- 当前不会命中断点 还没有为该文档加载任何符号
- spring 配置事务传播特性
- 模仿淘宝评价的星级显示
- iPhone 应用中实现拨打电话功能的代码
- Exception