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解题报告的更多相关文章

  1. USACO 2016 January Contest, Gold解题报告

    1.Angry Cows http://www.usaco.org/index.php?page=viewproblem2&cpid=597 dp题+vector数组运用 将从左向右与从右向左 ...

  2. USACO 2016 US Open Contest, Gold解题报告

    1.Splitting the Field http://usaco.org/index.php?page=viewproblem2&cpid=645 给二维坐标系中的n个点,求ans=用一个 ...

  3. USACO Section2.2 Preface Numbering 解题报告 【icedream61】

    preface解题报告----------------------------------------------------------------------------------------- ...

  4. USACO Section2.1 Hamming Codes 解题报告 【icedream61】

    hamming解题报告----------------------------------------------------------------------------------------- ...

  5. USACO Section2.1 Healthy Holsteins 解题报告 【icedream61】

    holstein解题报告 --------------------------------------------------------------------------------------- ...

  6. USACO Section2.1 The Castle 解题报告

    castle解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...

  7. USACO Section1.5 Prime Palindromes 解题报告

    pprime解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...

  8. USACO Section2.3 Controlling Companies 解题报告 【icedream61】

    concom解题报告------------------------------------------------------------------------------------------ ...

  9. USACO Section2.3 Money Systems 解题报告 【icedream61】

    money解题报告------------------------------------------------------------------------------------------- ...

随机推荐

  1. labview之连接MySQL数据库

    Labview之连接MySQL数据库 由于项目需要,在Labview开发中,需要使用MySQL数据库.这里介绍两种连接MySQL数据库的方式. 分别为使用Labsql工具包和Database Conn ...

  2. Object.defineProperty和Object.defineProperties

    添加属性到对象,或修改现有属性的特性   用法:     Object.defineProperty(object, propertyName, descriptor); 参数:     object ...

  3. 菜单项onCreateOptionsMenu()和onOptionsItemSelected()的使用

    Java源文件 package com.example.macname.myapplication; import android.support.v7.app.AppCompatActivity; ...

  4. render:h => h(App) 是什么意思?

    在学习vue.js时,使用vue-cli创建了一个vue项目,main.js文件中有一行代码不知道什么意思.在网上搜索得到如下解答: 参考一:https://www.cnblogs.com/longy ...

  5. Java Spring-JdbcTemplate

    2017-11-10 22:55:45 Spring 对持久层技术支持 : JDBC : org.springframework.jdbc.core.JdbcTemplate Hibernate3.0 ...

  6. python学习笔记(HTMLTestRunner在Py3的兼容)

    博主最近开始重构自动化框架并且向Py3上兼容 第一个问题就是生成测试报告的HTMLTestRunner,由于此模块是基于Py2开发的,这里需要修改源码 # 94行 # import StringIO ...

  7. git报错:src refspec master does not match any

    问题出现:git推送本地内容到远程仓库时,报错src refspec master does not match any. 1.我的流程: mkdir project_k命令,新建本地仓库. cd p ...

  8. Eclips安装SVN插件

    1.eclipse -> Help ->Install New Software->add 2.弹出窗的"Name"和"URL"中输入如下内容 ...

  9. mysql-connect-odbc连接

  10. python多任务的导包问题

    多线程的使用: import threading def func(x): print(x) t= threading.Thread(target=func,args=(12,)) # 线程启动 t. ...