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. linux内核源码在线浏览

    1.https://elixir.bootlin.com  (只能搜索函数和宏定义,功能单一) 2.https://lxr.missinglinkelectronics.com (比第一个功能多一些, ...

  2. javascript method.

    //**************************************************************** //* 名 称:DataLength //* 功 能:计算数据的长 ...

  3. data.table 中的动态作用域

    data.table 中最常用的语法就是 data[i, j, by],其中 i.j 和 by 都是在动态作用域中被计算的.换句话说,我们不仅可以直接使用列,也可以提前定义诸如 .N ..I 和 .S ...

  4. JSP 点击量统计

    JSP 点击量统计 有时候我们需要知道某个页面被访问的次数,这时我们就需要在页面上添加页面统计器,页面访问的统计一般在用户第一次载入时累加该页面的访问数上. 要实现一个计数器,您可以利用应用程序隐式对 ...

  5. ORA-12505: TNS: 监听程序当前无法识别连接描述符中所给出的SID等错误解决方法

    程序连接orarle报ORA-12505错误 一.异常{ ORA-12505, TNS:listener does not currently know of SID given in connect ...

  6. 最小生成树prim和kruskal模板

    prim: int cost[MAX_V][MAX_V]; //cost[u][v]表示边e=(u,v)的权值(不存在的情况下设为INF) int mincost[MAX_V]; //从集合X出发的每 ...

  7. qt忙等与非忙等

    非忙等: void delay(int msec) { QTime end = QTime::currentTime().addMSecs(msec); while( QTime::currentTi ...

  8. MHA-ATLAS-MySQL高可用2

    六,配置VIP漂移 主机名 IP地址(NAT) 漂移VIP 描述 mysql-db01 eth0:192.168.0.51 VIP:192.168.0.60 系统:CentOS6.5(6.x都可以) ...

  9. LINUX中的RCU机制的分析

    RCU机制是Linux2.6之后提供的一种数据一致性访问的机制,从RCU(read-copy-update)的名称上看,我们就能对他的实现机制有一个大概的了解,在修改数据的时候,首先需要读取数据,然后 ...

  10. 条件查询、SQL、JPQL、HQL比较

    一.什么是JPQL 在 Java EE 中,JPQL( Java 持久性查询语言)是专门为Java 应用程序访问和导航实体实例设计的.JPQL是EJB2使用的查询语言EJB QL的扩展,它继承了EJB ...