USACO 2016 February Contest, Gold解题报告
1.Circular Barn
http://www.usaco.org/index.php?page=viewproblem2&cpid=621
贪心
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
long long sum(long long v)
{
return v*(v+)*(*v+)/;
}
int main()
{
int N,c=;
scanf("%d",&N);
vector<long long> A(N);
for(int i=;i<N;i++)
{
scanf("%d",&A[i]);
c=max(0ll,c+A[i]-);
}
for(int i=;;i++)
{
if(c==)
{
rotate(A.begin(),A.begin()+i,A.begin()+N);
break;
}
c=max(0ll,c+A[i]-);
}
long long res=;
for (int i=;i<N;i++)
{
res+=sum(A[i]+c-)-sum(c-);
c=max(0ll,c+A[i]-);
}
printf("%d",res);
}
2.Circular Barn Revisited
http://www.usaco.org/index.php?page=viewproblem2&cpid=622
首先,记录从i开始的j个房间的奶牛都从i从i号门进入所走的总距离。
然后进行dp,找出最小路程
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAXN 100
#define MAXK 7
int n,r[MAXN+],k;
long long f[MAXN*+][MAXN+][MAXK+],ans=0x7fffffffffffffffll,dist[MAXN+][MAXN+];
void Read(int &x){
char c;
while(c=getchar(),c!=EOF)
if(c>=''&&c<=''){
x=c-'';
while(c=getchar(),c>=''&&c<='')
x=x*+c-'';
ungetc(c,stdin);
return;
}
}
void read(){
Read(n),Read(k);
int i;
for(i=;i<=n;i++)
Read(r[i]);
}
void prepare(){
int i,j;
for(i=;i<=n;i++){
dist[i][]=;
for(j=;j<=n;j++)
dist[i][j]=r[(i+j-)%n+]*(j-)+dist[i][j-];
}
}
void dp(){
int i,j,l,t=*n,p;
memset(f,0x3f,sizeof f);
for(i=;i<=t;i++)
f[i][][]=;
for(i=;i<=n;i++){
for(j=;j<=n&&j<=i;j++)
for(l=;l<=k;l++)
for(p=;p<=j;p++)
f[i][j][l]=min(f[i][j][l],f[i-p][j-p][l-]+dist[i-p+][p]);
ans=min(ans,f[i][n][k]);
}
for(i=n+;i<=t;i++){
for(j=;j<=n;j++)
for(l=;l<=k;l++)
for(p=;p<=j;p++)
f[i][j][l]=min(f[i][j][l],f[i-p][j-p][l-]+dist[(i-p)%n+][p]);
ans=min(ans,f[i][n][k]);
}
}
int main()
{
read();
prepare();
dp();
printf("%lld\n",ans);
}
3.Fenced In
最小生成树
处理出连通块之间栅栏的长度然后做最小生成树即可。 但是这样会T,尽管算法时间复杂度为 O(n2log2n)
优化:由于每一行或每一列中的相邻两个连通块之间的栅栏长度相等,我们可以考虑使用kruskal算法,仅仅对每两个栅栏之间的距离排序,然后然后再对这一行(列)的所有相邻连通块连边即可。
#include<cstdio>
#include<algorithm>
#define MAXN 2000
using namespace std;
long long ans;
int n,a[MAXN+],b[MAXN+],A,B,m,tot,fa[(MAXN+)*(MAXN+)+];
void Read(int &x){
char c;
while(c=getchar(),c!=EOF)
if(c>=''&&c<=''){
x=c-'';
while(c=getchar(),c>=''&&c<='')
x=x*+c-'';
ungetc(c,stdin);
return;
}
}
void read(){
int i,t;
Read(A),Read(B),Read(n),Read(m);
for(i=;i<=n;i++)
Read(a[i]);
for(i=;i<=m;i++)
Read(b[i]);
sort(a+,a+n+);
sort(b+,b+m+);
a[++n]=A;
b[++m]=B;
for(i=n;i;i--)
a[i]-=a[i-];
for(i=m;i;i--)
b[i]-=b[i-];
sort(a+,a+n+);
sort(b+,b+m+);
t=n*m;
for(i=;i<=t;i++)
fa[i]=i;
}
int find(int x){
return x==fa[x]?x:fa[x]=find(fa[x]);
}
void kruskal(){
int i,j,k,l;
i=j=;
while(i<=n||j<=m){
if(j>m||(i<=n&&a[i]<=b[j])){
k=(i-)*m+;
for(l=;l<m;l++,k++)
if(find(k)!=find(k+))
fa[fa[k]]=fa[k+],ans+=a[i];
++i;
}
else{
k=j;
for(l=;l<n;l++,k+=m)
if(find(k)!=find(k+m))
fa[fa[k]]=fa[k+m],ans+=b[j];
++j;
}
}
}
int main()
{
read();
kruskal();
printf("%lld\n",ans);
}
USACO 2016 February Contest, Gold解题报告的更多相关文章
- USACO 2016 January Contest, Gold解题报告
1.Angry Cows http://www.usaco.org/index.php?page=viewproblem2&cpid=597 dp题+vector数组运用 将从左向右与从右向左 ...
- USACO 2016 US Open Contest, Gold解题报告
1.Splitting the Field http://usaco.org/index.php?page=viewproblem2&cpid=645 给二维坐标系中的n个点,求ans=用一个 ...
- USACO Section2.2 Preface Numbering 解题报告 【icedream61】
preface解题报告----------------------------------------------------------------------------------------- ...
- USACO Section2.1 Hamming Codes 解题报告 【icedream61】
hamming解题报告----------------------------------------------------------------------------------------- ...
- USACO Section2.1 Healthy Holsteins 解题报告 【icedream61】
holstein解题报告 --------------------------------------------------------------------------------------- ...
- USACO Section2.1 The Castle 解题报告
castle解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...
- USACO Section1.5 Prime Palindromes 解题报告
pprime解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...
- USACO Section2.3 Controlling Companies 解题报告 【icedream61】
concom解题报告------------------------------------------------------------------------------------------ ...
- USACO Section2.3 Money Systems 解题报告 【icedream61】
money解题报告------------------------------------------------------------------------------------------- ...
随机推荐
- TCGA系列--GDCRNATools
https://github.com/Jialab-UCR/GDCRNATools GDCRNATools - An R package for downloading, organizing, an ...
- Spring IOC容器的初始化流程
IOC初始化流程 Resource定位:指对BeanDefinition的资源定位过程.Bean 可能定义在XML中,或者是一个注解,或者是其他形式.这些都被用Resource来定位, 读取Resou ...
- JavaScript权威指南--正则表达式
知识要点 正则表达式,是一个描述字符模式的对象.javascript的RegExp类表示正则表达式,String和RegExp都定义了方法,后者使用正则表达式进行强大的模式匹配和文本检索与替换功能. ...
- Intel IDEA 2018破解(亲测成功)
破解网址:https://jingyan.baidu.com/article/cb5d6105d9b1b1005d2fe074.html
- localStorage(本地存储)使用总结
1.https://www.cnblogs.com/st-leslie/p/5617130.html (localStorage使用总结)
- java并发编程:线程安全管理类--原子操作类--AtomicIntegerFieldUpdater<T>
1.类 AtomicIntegerFieldUpdater<T> public abstract class AtomicIntegerFieldUpdater<T> exte ...
- 增加 修改oracle约束条件
ALTER TABLE TB_ZJGL_DWSB_GRMX ADD CONSTRAINT SFZH_UNIQUE UNIQUE(SFZH); ALTER TABLE TB_ZJGL_DWS ...
- New Concept English Two 10 25
$课文23 新居 219. I had a letter from my sister yesterday. 昨天我收到了姐姐的一封信, 220. She lives in Nigeria. 她住在尼 ...
- JDk和Mevan安装和配置
一.Mevan安装和配置 1.下载Maven 官方下载地址:http://maven.apache.org/download.html 选择你所希望下载的版本,并保存到常用安装目录.这里以Maven ...
- ASP.NET CORE网站部署到 windows server 的IIS 上去
章基于我自己经验的一个总结,在windows服务器上部署asp.net core网站.环境是 windows server 2012数据中心版本 第一步先安装 IIS 服务器 接下来就是一路下一步,然 ...