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. Redis之Python 使用 Redis

    Python 使用 Redis 参考文档: http://redis.cn/clients.html#python https://github.com/andymccurdy/redis-py 安装 ...

  2. idea tomcat启动乱码问题

    配置idea的安装文件的编码: JetBrains\IntelliJ IDEA 2016.3\bin中配置文件idea.exe.vmoptions.idea64.exe.vmoptions 添加 -D ...

  3. Codeforces Round #396 (Div. 2) A,B,C,D,E

    A. Mahmoud and Longest Uncommon Subsequence time limit per test 2 seconds memory limit per test 256 ...

  4. python 清空列表

    # lst = ["篮球","排球","乒乓球","足球","电子竞技","台球" ...

  5. vim 安装molokai主题

    在.vim文件夹下创建文件夹colors 进入 https://github.com/tomasr/molokai 下载molokai.vim 将其放入colors文件夹下 进入.vimrc中 添加 ...

  6. php-----utf8和gbk相互转换

    utf8转换为gbk <?php header("Content-type:text/html;charset=UTF-8"); echo $str= '你好,这里是utf8 ...

  7. OleDbCommand使用参数应该注意的地方

    最近写程序用到OleDbCommand的Parameter写数据库,遇到很多问题: 1.OLE DB .NET Framework 数据提供程序和 ODBC .NET Framework 数据提供程序 ...

  8. 加密算法中涉及C/C++总结

    学习网站:http://www.runoob.com/cplusplus/cpp-functions.html char在VC(c++)中占1字节(byte),8位(bit). int在VC(c++) ...

  9. Qt 线程基础

    (转自:http://my.oschina.net/laopiao/blog/88158) 何谓线程? 线程与并行处理任务息息相关,就像进程一样.那么,线程与进程有什么区别呢?当你在电子表格上进行数据 ...

  10. Redis.RedisNativeClient的方法get_Db 没有实现

    C#出现问题:Redis.RedisNativeClient”的方法“get_Db”没有实现 ServiceStack.Redis.RedisNativeClient”的方法“get_Db”没有实现 ...