[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 ...
随机推荐
- ASP.NET MVC各个版本区别
ASP.NET MVC 1 view接收用户输入,把命令传到controller controller处理命令,更新model model被更新后,会通知view需要update view更新后向用户 ...
- 制作Solaris系统的USB启动盘
制作方法: 1. wget http://192.168.2.5/surefiler-installer/2011-12-09/devel-2011.12.9.tgz 2. cd /root tar ...
- 自定义ToolBar
一.Toolbar的简介 Toolbar 是 android 5.0 引入的一个新控件,Toolbar出现之前,我们很多时候都是使用ActionBar以及ActionActivity实现顶部导航栏的, ...
- git 配置多用户
.ssh 下的 config.txt 内容 # 配置github.com Host github.com HostName github.com IdentityFile ~/.ssh/id_rsa_ ...
- netlink socket编程
转载 原文地址:netlink socket编程之why & how (转) 作者:renyuan000 作者: Kevin Kaichuan He@2005-1-5 翻译整理:duanjig ...
- Exploring Qualcomm's TrustZone Implementation
转自 http://bits-please.blogspot.com/2015/08 (需要FQ, 狗日的墙) In this blog post, we'll be exploring Qua ...
- Linux 内核通知链随笔【中】【转】
转自:http://blog.chinaunix.net/uid-23069658-id-4364171.html 关于内核通知链不像Netlink那样,既可以用于内核与用户空间的通信,还能用于内核不 ...
- Leetcode 之Add Binary(29)
比较简单,细节:先将字符串翻转,注意进位. string addBinary(string a, string b) { string result; int len = a.size() > ...
- [设计模式-行为型]模板方法模式(Template Method)
一句话 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中. 概括
- scrapy-redis组件的使用
scrapy-redis是一个基于redis的scrapy组件,通过它可以快速实现简单分布式爬虫程序,该组件本质上提供了三大功能: scheduler - 调度器 dupefilter - URL去重 ...