UVa1628 UVaLive5847 Pizza Delivery
2016-01-05 11:36
176 查看
填坑系列(p.302)
既然不知道后面还要卖多少个就加一维状态嘛。。
lrj写的O(n)转移?其实转移可以O(1)
貌似按x排序有奇效?
View Code
既然不知道后面还要卖多少个就加一维状态嘛。。
lrj写的O(n)转移?其实转移可以O(1)
貌似按x排序有奇效?
#include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<iostream> using namespace std; void setIO(const string& s) { freopen((s + ".in").c_str(), "r", stdin); freopen((s + ".out").c_str(), "w", stdout); } template<typename Q> Q read(Q& x) { static char c, f; for(f = 0; c = getchar(), !isdigit(c); ) if(c == '-') f = 1; for(x = 0; isdigit(c); c = getchar()) x = x * 10 + c - '0'; if(f) x = -x; return x; } template<typename Q> Q read() { static Q x; read(x); return x; } const int N = 100 + 10, INF = 0x3f3f3f3f; int p , v , n, cas; int f [2]; int vis [2]; int dfs(int s, int e, int cnt, int pos) { if(!cnt) return 0; int &ans = f[s][e][cnt][pos]; if(vis[s][e][cnt][pos] == cas) return ans; vis[s][e][cnt][pos] = cas; ans = -INF; int a[] = {s, e}; /*for(int i = 0; i < s; i++) { ans = max(ans, v[i] - cnt * abs(p[i] - p[a[pos]]) + dfs(i, e, cnt - 1, 0)); } for(int i = e + 1; i < n; i++) { ans = max(ans, v[i] - cnt * abs(p[i] - p[a[pos]]) + dfs(s, i, cnt - 1, 1)); }*/ if(s - 1 >= 0) { int dlt = cnt * abs(p[s - 1] - p[a[pos]]); ans = max(ans, v[s - 1] - dlt + dfs(s - 1, e, cnt - 1, 0)); ans = max(ans, -dlt + dfs(s - 1, e, cnt, 0)); } if(e + 1 < n) { int dlt = cnt * abs(p[e + 1] - p[a[pos]]); ans = max(ans, v[e + 1] - dlt + dfs(s, e + 1, cnt - 1, 1)); ans = max(ans, -dlt + dfs(s, e + 1, cnt, 1)) ; } return ans; } int main() { #ifdef DEBUG freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); #endif int T; scanf("%d", &T); for(cas = 1; cas <= T; cas++) { scanf("%d", &n); for(int i = 0; i < n; i++) scanf("%d", p + i); for(int i = 0; i < n; i++) scanf("%d", v + i); int ans = 0; for(int k = 1; k <= n; k++) { for(int i = 0; i < n; i++) { ans = max(ans, v[i] - k * abs(p[i]) + dfs(i, i, k - 1, 0)); } } printf("%d\n", ans); } return 0; }
View Code
相关文章推荐
- PYTHON压平嵌套列表
- 例题 3-5 生成元 digit generator
- 【C++】角谷猜想
- 【C++】绘制余弦曲线
- 【C++】彩球问题
- 【Android进阶】如何写一个很屌的动画(3)---高仿腾讯手机管家火箭动画
- 【C++】百钱买百鸡问题
- systemd详解(CentOS 7)
- 【C++】猴子吃桃
- 【C++】买苹果问题
- 【C++】促销商品的折扣计算
- 【C++】购物街中的商品价格竞猜
- 【C++】加油站加油
- 【C++】一元钱兑换方案
- 【C++】简单的级数运算
- android-运用notifyDataSetChanged()更新UI
- 【C++】序列求和
- 【C++】从1加到100
- 【C++】判断名次
- Chrome开发者工具不完全指南(一、基础功能篇)