[USACO 2017 Feb Gold] Tutorial
Link:
A:
分层图最短路(其实就是最短路转移时多记录一维的数据
#include <bits/stdc++.h> using namespace std;
#define X first
#define Y second
typedef double db;
typedef long long ll;
typedef pair<int,int> P;
const int MAXN=;
int n,T,dat[MAXN][MAXN];
ll d[MAXN][MAXN][];
struct node{int x,y,d,w;}; int dx[]={,,,-};
int dy[]={,-,,};
priority_queue<node> q;
bool operator < (node a,node b){return a.w>b.w;} int main()
{
scanf("%d%d",&n,&T);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
scanf("%d",&dat[i][j]); memset(d,0x3f,sizeof(d));
d[][][]=;
q.push(node{,,,});
while(!q.empty())
{
node t=q.top();q.pop();
if(d[t.x][t.y][t.d]<t.w) continue;
for(int i=;i<;i++)
{
int fx=t.x+dx[i],fy=t.y+dy[i],cur=(t.d+)%;
if(fx<||fy<||fx>n||fy>n) continue;
ll cost=t.w+T+(cur==?dat[fx][fy]:);
if(d[fx][fy][cur]>cost)
d[fx][fy][cur]=cost,q.push(node{fx,fy,cur,cost});
}
} printf("%lld",min(d[n][n][],min(d[n][n][],d[n][n][])));
return ;
}
Problem A
B:
本来很基础的$dp$还纠结了一会状态的选择……
其实就是最长公共子序列:$dp[i][j]=dp[i-1][j-1]+1/max(dp[i-1][j],dp[i][j-1])$
#include <bits/stdc++.h> using namespace std;
#define X first
#define Y second
typedef double db;
typedef long long ll;
typedef pair<int,int> P;
const int MAXN=1e3+;
int n,a[MAXN],b[MAXN],dp[MAXN][MAXN]; int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
for(int i=;i<=n;i++) scanf("%d",&b[i]); for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
if(abs(a[i]-b[j])<=)
dp[i][j]=max(dp[i][j],dp[i-][j-]+);
dp[i][j]=max(dp[i][j],max(dp[i-][j],dp[i][j-]));
}
printf("%d",dp[n][n]);
return ;
}
Problem B
如果从$dp[i][j]$向后转移答案依然是对的,但可能理解起来有些奇怪……
虽然$dp[i][j]$直接向$dp[i+1][j]/dp[i][j+1]$转移可能不是最优解,但一定能保证最优解存在
其实就是将上述直接取$max$的过程拆成两次更新
C:
此类偏序问题基本上都涉及到排序
可以发现将$l_i$排序后对于第$i$区间产生的关系数就是在该区间内$r_j$
#include <bits/stdc++.h> using namespace std;
#define X first
#define Y second
#define pb push_back
typedef double db;
typedef long long ll;
typedef pair<int,int> P;
const int MAXN=2e5+;
int n,x,bit[MAXN];
ll res=;P dat[MAXN]; void Update(int x)
{while(x<=*n) bit[x]++,x+=x&(-x);}
ll Query(int x)
{ll ret=;while(x) ret+=bit[x],x-=x&(-x);return ret;} int main()
{
scanf("%d",&n);
for(int i=;i<=*n;i++)
{
scanf("%d",&x);
if(!dat[x].X) dat[x].X=i;
else dat[x].Y=i;
}
sort(dat+,dat+n+); for(int i=;i<=n;i++)
res+=Query(dat[i].Y)-Query(dat[i].X-),Update(dat[i].Y);
printf("%lld",res);
return ;
}
Problem C
[USACO 2017 Feb Gold] Tutorial的更多相关文章
- [USACO 2018 Feb Gold] Tutorial
Link: USACO 2018 Feb Gold 传送门 A: $dp[i][j][k]$表示前$i$个中有$j$个0且末位为$k$的最优解 状态数$O(n^3)$ #include <bit ...
- [USACO 2017 Dec Gold] Tutorial
Link: USACO 2017 Dec Gold 传送门 A: 为了保证复杂度明显是从终结点往回退 结果一开始全在想优化建边$dfs$……其实可以不用建边直接$multiset$找可行边跑$bfs$ ...
- USACO 2017 FEB Gold visitfj 最短路
题意 有一幅n*n的方格图,n <= 100,每个点上有一个值.从(1,1)出发,走到(n,n),只能走四联通.每走一步花费t,每走三步需要花费走完三步后到达格子的值.求最小花费的值. 拆点,d ...
- [USACO 2017 Open Gold] Tutorial
Link: 传送门 A: 由于每个颜色只染色一次就确定了所有要染色的区间 要求染色的次数其实就是求区间最多嵌套多少层,如果有区间相交则无解 以上操作明显可以将左端点排序后用栈来维护 #include ...
- [USACO 2017 Jan Gold] Tutorial
Link: 传送门 A: 按值大小插入后用树状数组统计两边个数 #include <bits/stdc++.h> using namespace std; #define X first ...
- [USACO 2018 Jan Gold] Tutorial
Link: USACO 2018 Jan Gold 传送门 A: 对于不同的$k$,发现限制就是小于$k$的边不能走 那么此时的答案就是由大于等于$k$的边形成的图中$v$所在的连通块除去$v$的大小 ...
- [ USACO 2017 FEB ] Why Did the Cow Cross the Road III (Gold)
\(\\\) \(Description\) 给定长度为\(2N\)的序列,\(1\text ~N\)各出现过\(2\)次,\(i\)第一次出现位置记为\(a_i\),第二次记为\(b_i\),求满足 ...
- USACO 2017 FEB Platinum nocross DP
题目大意 上下有两个长度为n.位置对应的序列A.B,其中数的范围均为1~n.若abs(A[i]-B[j]) <= 4,则A[i]与B[j]间可以连一条边.现要求在边与边不相交的情况下的最大的连边 ...
- [USACO 2012 Feb Gold] Cow Coupons【贪心 堆】
传送门1:http://www.usaco.org/index.php?page=viewproblem2&cpid=118 传送门2:http://www.lydsy.com/JudgeOn ...
随机推荐
- 炒鸡简单的canvas粒子(山东数漫江湖)
位图的canvas一直不会被svg比下去的原因了. 俗话说,须弥芥子,是大小之说,也有以小见大之说,颗颗粒子,足以构建宏大效果. 这是一篇炒鸡简单的canvas粒子教程,主要是讲如何粒子特效的原理,一 ...
- 【洛谷 P1419】 寻找段落(二分答案,单调队列)
题目链接 开始还以为是尺取.发现行不通. 一看标签二分答案,恍然大悟. 二分一个\(mid\)(实数),把数列里每个数减去\(mid\),然后求前缀和,在用单调队列维护\(sum[i-t\text{~ ...
- 4 Values whose Sum is 0 POJ 2785 (折半枚举)
题目链接 Description The SUM problem can be formulated as follows: given four lists A, B, C, D of intege ...
- 通过JDBC连接HiveServer2
如果通过JDBC连接HiveServer2时提示:User: hive is not allowed to impersonate hive,需要在core-site.xml中新增如下配置: hado ...
- splay:优雅的区间暴力!
万年不更的blog主更新啦!主要是最近实在忙,好不容易才从划水做题的时间中抽出一段时间来写这篇blog 首先声明:这篇blog写的肯定会很基础...因为身为一个蒟蒻深知在茫茫大海中找到一个自己完全能够 ...
- python模块中requests参数stream
PS:这个参数真没用过 当下载大的文件的时候,建议使用strea模式. 默认情况下是false,他会立即开始下载文件并存放到内存当中,倘若文件过大就会导致内存不足的情况. 当把get函数的stream ...
- 一文看懂IC芯片生产流程:从设计到制造与封装
http://blog.csdn.net/yazhouren/article/details/50810114 芯片制造的过程就如同用乐高盖房子一样,先有晶圆作为地基,再层层往上叠的芯片制造流程后,就 ...
- 2017多校第9场 HDU 6166 Senior Pan 堆优化Dij
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6166 题意:给你一个有向图,然后给你k个点,求其中一个点到另一个点的距离的最小值. 解法:枚举二进制位 ...
- [ Linux ] 服务器更换硬盘
服务器型号:ThinkServer RD650操作系统:Red Hat 6.7业务用途:生产环境监控机 接到机房邮件通知,告知某台服务器硬盘告警,并提供了设备SN号和机柜位置.根据提供想相关信息找到对 ...
- 【python】msgpack使用
1.存储数据 import msgpack var={'a':'this','b':'is','c':'a test'} with open('file.name','wb') as f: msgpa ...