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的更多相关文章

  1. [USACO 2018 Feb Gold] Tutorial

    Link: USACO 2018 Feb Gold 传送门 A: $dp[i][j][k]$表示前$i$个中有$j$个0且末位为$k$的最优解 状态数$O(n^3)$ #include <bit ...

  2. [USACO 2017 Dec Gold] Tutorial

    Link: USACO 2017 Dec Gold 传送门 A: 为了保证复杂度明显是从终结点往回退 结果一开始全在想优化建边$dfs$……其实可以不用建边直接$multiset$找可行边跑$bfs$ ...

  3. USACO 2017 FEB Gold visitfj 最短路

    题意 有一幅n*n的方格图,n <= 100,每个点上有一个值.从(1,1)出发,走到(n,n),只能走四联通.每走一步花费t,每走三步需要花费走完三步后到达格子的值.求最小花费的值. 拆点,d ...

  4. [USACO 2017 Open Gold] Tutorial

    Link: 传送门 A: 由于每个颜色只染色一次就确定了所有要染色的区间 要求染色的次数其实就是求区间最多嵌套多少层,如果有区间相交则无解 以上操作明显可以将左端点排序后用栈来维护 #include ...

  5. [USACO 2017 Jan Gold] Tutorial

    Link: 传送门 A: 按值大小插入后用树状数组统计两边个数 #include <bits/stdc++.h> using namespace std; #define X first ...

  6. [USACO 2018 Jan Gold] Tutorial

    Link: USACO 2018 Jan Gold 传送门 A: 对于不同的$k$,发现限制就是小于$k$的边不能走 那么此时的答案就是由大于等于$k$的边形成的图中$v$所在的连通块除去$v$的大小 ...

  7. [ USACO 2017 FEB ] Why Did the Cow Cross the Road III (Gold)

    \(\\\) \(Description\) 给定长度为\(2N\)的序列,\(1\text ~N\)各出现过\(2\)次,\(i\)第一次出现位置记为\(a_i\),第二次记为\(b_i\),求满足 ...

  8. USACO 2017 FEB Platinum nocross DP

    题目大意 上下有两个长度为n.位置对应的序列A.B,其中数的范围均为1~n.若abs(A[i]-B[j]) <= 4,则A[i]与B[j]间可以连一条边.现要求在边与边不相交的情况下的最大的连边 ...

  9. [USACO 2012 Feb Gold] Cow Coupons【贪心 堆】

    传送门1:http://www.usaco.org/index.php?page=viewproblem2&cpid=118 传送门2:http://www.lydsy.com/JudgeOn ...

随机推荐

  1. Berland National Library

    题目链接:http://codeforces.com/problemset/problem/567/B 题目描述: Berland National Library has recently been ...

  2. JqGrid自定义(图片)列

    $("#gridTable").jqGrid({ //...其它属性 colModel: [ //...其它列 { name: , align: "center" ...

  3. Optimizing subroutine calls based on architecture level of called subroutine

    A technique is provided for generating stubs. A processing circuit receives a call to a called funct ...

  4. C 实现有追求的线程池 探究

    引言 线程池很普通的老话题,讨论的很多.深入的不多,也就那些基础库中才能见到这种精妙完备的技巧.而本文随大流 想深入简述一种高效控制性强的一种线程池实现. 先引入一个概念, 惊群. 简单举个例子. 春 ...

  5. Tensorflow项目实战一:MNIST手写数字识别

    此模型中,输入是28*28*1的图片,经过两个卷积层(卷积+池化)层之后,尺寸变为7*7*64,将最后一个卷积层展成一个以为向量,然后接两个全连接层,第一个全连接层加一个dropout,最后一个全连接 ...

  6. VPS性能测试方法小结(8)

    1.为了能够得到更为准确和详细的有关VPS主机性能测试数据,我们应该多角度.全方位地运行多种VPS性能测试工具来进行检测,同时也要记得排除因本地网络环境而造成的数据结果的错误. 2.VPS主机性能跑分 ...

  7. Canvas开发库封装

    一.Canvas第三方类库 1.常见的第三方类库 konva.js <style> body{ margin:0; } </style> </head> <b ...

  8. [PAT] 1144 The Missing Number(20 分)

    1144 The Missing Number(20 分) Given N integers, you are supposed to find the smallest positive integ ...

  9. 《java并发编程实战》读书笔记10--显示锁Lock,轮询、定时、读写锁

    第13章 显示锁 终于看到了这本书的最后一本分,呼呼呼,真不容易.其实说实在的,我不喜欢半途而废,有其开始,就一定要有结束,否则的话就感觉哪里乖乖的. java5.0之前,在协调对共享对象的访问时可以 ...

  10. mysql部署后无法远程连接的原因(错误代码10061),服务监听127.0.0.1和0.0.0.0的区别

    在Ubuntu上部署mysql服务并添加了一个非root用户后,发现无法远程连接, Navicat连接mysql出现2003——can't connect to mysql server on loc ...