USACO 2006 November Gold
POJ 3253 Fence Repair STL堆操作
我想说,STL里堆是我目前见到最蛋疼的操作。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cmath>
#include <utility>
#include <vector>
#include <queue>
#include <map>
#include <set>
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)>(y)?(y):(x)) using namespace std; int n,a[]; int main()
{
scanf("%d",&n);
for(int i=; i<n; i++)
scanf("%d",&a[i]);
vector< int > v(a,a+n);
make_heap(v.begin(),v.end(),greater< int >());
long long ans=;
for(int i=; i<=n-; i++)
{
long long tmp=v.front();
pop_heap(v.begin(),v.end(),greater< int >());
v.pop_back();
tmp+=v.front();
pop_heap(v.begin(), v.end(),greater< int >());
v.pop_back();
v.push_back(tmp);
push_heap(v.begin(),v.end(),greater< int >());
ans+=tmp;
printf("%d\n", tmp);
}
printf("%lld\n",ans);
return ;
}
POJ 3254 Corn Fields 状态压缩递推
uc[]表示相邻两位不同时为1的情况,377种,因此n*377^2即可
注意,位运算优先级是低于==的!
#include <cstdio>
#include <cstring>
#define MOD 100000000 int n,m,a[],k;
int uc[],all;
int f[][]; int main()
{
scanf("%d%d",&n,&m);
for(int i=; i<n; i++)
for(int j=; j<m; j++)
{
scanf("%d",&k);
a[i]=(a[i]<<)+k;
}
for(int i=; i<(<<m); i++)
{
int tmi=i,flag=;
while(tmi)
{
if((tmi&)==) flag=;
tmi>>=;
}
if(!flag)
{
uc[all++]=i;
if((i|a[])==a[])
f[][i]=;
}
} for(int i=; i<n; i++)
for(int j=; j<all; j++)
if((a[i]|uc[j])==a[i])
{
for(int k=; k<all; k++)
if(!(uc[j]&uc[k]))
{
f[i][uc[j]]=(f[i][uc[j]]+f[i-][uc[k]])%MOD;
}
} int ans=;
for(int j=; j<all; j++)
ans=(ans+f[n-][uc[j]])%MOD;
printf("%d\n", ans);
return ;
}
POJ 3255 A*算法求第k短路
第一次接触A*,了解了下。
—————————————————维基百科————————————————————————————
如果以 g(n)表示从起点到任意顶点n的实际距离,h(n)表示任意顶点n到目标顶点的估算距离,那么 A*算法的公式为:f(n)=g(n)+h(n)。 这个公式遵循以下特性:
- 如果h(n)为0,只需求出g(n),即求出起点到任意顶点n的最短路径,则转化为单源最短路径问题,即Dijkstra算法
- 如果h(n)<=“n到目标的实际距离”,则一定可以求出最优解。而且h(n)越小,需要计算的节点越多,算法效率越低。
—————————————————————————————————————————————————
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cmath>
#include <utility>
#include <vector>
#include <queue>
#include <map>
#include <set>
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)>(y)?(y):(x))
#define INF 0x3f3f3f3f using namespace std; struct Edge
{
int y,w,ne;
}e[]; int x,y,w,n,m;
int be[],all;
int h[];
bool vis[]; struct Point
{
int x,g;
bool operator < (const Point T) const
{
return g+h[x]>T.g+h[T.x];
}
}; void add(int x, int y, int w)
{
e[all].y=y;
e[all].w=w;
e[all].ne=be[x];
be[x]=all++;
} void SPFA(int s)
{
queue< int > q;
for(int i=; i<=n; i++)
{
h[i]=INF;
vis[i]=;
}
h[s]=;
vis[s]=;
while(!q.empty())
q.pop();
q.push(s);
while(!q.empty())
{
int u=q.front();
q.pop();
vis[u]=;
for(int i=be[u]; i!=-; i=e[i].ne)
{
int v=e[i].y;
if(h[v]>h[u]+e[i].w)
{
h[v]=h[u]+e[i].w;
if(!vis[v])
{
vis[v]=;
q.push(v);
}
}
}
}
} int Astar(int s, int t, int k)
{
SPFA(t);
priority_queue< Point > q;
while(!q.empty())
q.pop();
memset(vis,,sizeof(vis));
Point cur,nxt;
cur.x=s;
cur.g=;
q.push(cur);
while(!q.empty())
{
cur=q.top();
q.pop();
if(cur.x==t && !--k)
return cur.g;
for(int i=be[cur.x]; i!=-; i=e[i].ne)
{
nxt.x=e[i].y;
nxt.g=cur.g+e[i].w;
q.push(nxt);
}
}
return -;
} void init()
{
all=;
memset(be,-,sizeof(be));
} int main()
{
scanf("%d%d",&n,&m);
init();
for(int i=; i<m; i++)
{
scanf("%d%d%d",&x,&y,&w);
add(x,y,w);
add(y,x,w);
}
printf("%d\n",Astar(,n,));
return ;
}
USACO 2006 November Gold的更多相关文章
- USACO 2006 November Gold Corn Fields
USACO 2006 November Gold Corn Fields 题目描述: Farmer John has purchased a lush new rectangular pasture ...
- 【USACO 2006 November Gold】Corn Fields
[题目链接] 点击打开链接 [算法] 状压DP [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 12 #def ...
- USACO 2006 November Gold Fence Repair /// 贪心(有意思)(优先队列) oj23940
题目大意: 输入N ( 1 ≤ N ≤ 20,000 ) :将一块木板分为n块 每次切割木板的开销为这块木板的长度,即将长度为21的木板分为13和8,则开销为21 接下来n行描述每块木板要求的长度Li ...
- USACO 2006 November Gold Corn Fields /// 状压 oj23941
题目大意: 输入n m 接下来n行m列 0表示不能种玉米 1表示能 要求种玉米位置的上下左右四连通区域不能种玉米 输出方案数 Sample Input 2 31 1 10 1 0 Sample Out ...
- 【usaco 2006 feb gold】 牛棚安排
终于自己独立做出来一道题QAQ然而本校数据实在太水不能确定我是不是写对了... 原题: Farmer John的N(1<=N<=1000)头奶牛分别居住在农场所拥有的B(1<=B&l ...
- [Poj3261] [Bzoj1717] [后缀数组论文例题,USACO 2006 December Gold] Milk Patterns [后缀数组可重叠的k次最长重复子串]
和上一题(POJ1743,上一篇博客)相似,只是二分的判断条件是:是否存在一段后缀的个数不小于k #include <iostream> #include <algorithm> ...
- USACO 2008 November Gold Cheering up the Cows /// MST oj24381
题目大意: 输入n,p:n个点,p条路 接下来n行输入c[]:在各个点需要花费的时间 接下来p行输入u,v,w:u点到v点的路需要花费时间w 求经过所有点且最后回到起点的最少花费时间 https:// ...
- [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 2018 Jan Gold] Tutorial
Link: USACO 2018 Jan Gold 传送门 A: 对于不同的$k$,发现限制就是小于$k$的边不能走 那么此时的答案就是由大于等于$k$的边形成的图中$v$所在的连通块除去$v$的大小 ...
随机推荐
- Team Homework #3
我们组采访了以下几组学长学姐.因为隐私问题我们不会写出他们的个人信息. 1:平均每周所花时间:10:平均写的代码总数:2000:最有用的部分:锻炼团队合作精神:最没用的部分:写博客:改进:完全不需要博 ...
- 如何利用OpenCV自带的级联分类器训练程序训练分类器
介绍 使用级联分类器工作包括两个阶段:训练和检测. 检测部分在OpenCVobjdetect 模块的文档中有介绍,在那个文档中给出了一些级联分类器的基本介绍.当前的指南描述了如何训练分类器:准备训练数 ...
- CGI与Servlet的区别和联系
1. 定义: CGI(Common Gateway Interface 公共网关接口)是HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上. 2. 功能: 绝大多 ...
- 深入浅出百度地图API开发系列(1):前言
百度地图API目前在地图API领域越来越受到众多开发者的关注,许多应用都使用到了百度地图API服务,包括博主me,我自己使用做的是Javascript API,根据经验,我想整理出一份系列教程,如果能 ...
- Eclipse和intellij idea 快捷键对比
Eclipse和intellij idea 快捷键对比
- OWASP
开放式Web应用程序安全项目(OWASP,Open Web Application Security Project)是一个组织,它提供有关计算机和互联网应用程序的公正.实际.有成本效益的信息.其目的 ...
- 翻译:AngularJS应用的认证技术
原文: https://medium.com/opinionated-angularjs/7bbf0346acec 认证 最常用的表单认证就是用户名(或者邮件)和密码登录.这就表示要实现一个用户可以输 ...
- linux源码阅读笔记 数组定义
在阅读linux源码的过程中遇到了下面的略显奇怪的结构体数组定义. static struct hd_struct{ long start_sect; long nr_sects; }hd[10]={ ...
- linux出现bash: ./java: cannot execute binary file 问题的解决办法
问题现象描述: 到orcal官网上下载了两个jdk: (1)jdk-7u9-linux-i586.tar.gz ------------>32位 (2)jdk-7u9-linux-x64.tar ...
- python自定义函数在Python解释器中调用
https://docs.python.org/2.7/tutorial/modules.html Modules If you quit from the Python interpreter an ...