bzoj 2058+2059+2060 Usaco2010 Nov
三道金组比较容易的题目。。
2058
首先交换次数就是逆序对数,因为只能交换相邻的两数
先对原序列找逆序对数
用树状数组nlogn求出
然后O(n)依次求出其循环序列的逆序对数
比如 3 5 4 2 1
循环之后相对应的位置变成
2 4 3 1 5
表示第一个数到位置2,第二个数到位置4,第三个数到位置1 etc.
那么依次减一的那些数的逆序对数是不变的。只有1变成5的那个增加或减少了逆序对数
由于5是序列里最大的数,设其所在位置为i,因此增加了n-i对,减少了i-1对
这样总复杂度就是nlogn的
记得开Long long
#include<stdio.h> #include<string.h> #include<algorithm> #define LL long long using namespace std; struct node{ int v,id; }a[]; LL tot,ans,p[]; int n; bool cmp(node a, node b){ return a.v<b.v; } void add(int x){ while (x<=n){ p[x]++; x+=x&-x; } } LL sum(int x){ LL ret=; while (x){ ret+=p[x]; x-=x&-x; }return ret; } int main(){ scanf("%d", &n); ; i<=n; i++) scanf(; tot=; ; i<=n; i++){ add(a[i].v); tot+=(LL)i-sum(a[i].v); } sort(a+,a++n,cmp); ans=tot; ; i<=n; i++){ ); tot+=(LL)del; ans=min(ans,tot); } printf("%lld\n", ans); ; }
2059
单调队列DP,降复杂度为O(NK)
分n阶段进行单调队列的优化dp
设dis=a[i].x-a[i-1].x
f[i][k]=cost[i]*k+min{f[i-1][j]-cost[i]*j+dis*j*j};
显然f[i][k]只与f[i-1][k]有关所以省略一维,并且先插入队列(此时为f[i-1][k]的值),然后再更新为f[i][k]
#include<stdio.h> #include<string.h> #include<algorithm> #define LL long long using namespace std; ; struct node{ int x,f; LL c; }a[maxn]; struct que{ int v; LL val; }q[maxn*]; int K,end,n; LL f[maxn]; bool cmp(node a, node b){ return a.x<b.x; } int main(){ scanf("%d%d%d", &K, &end, &n); ; i<=n; i++) scanf("%d%d%lld", &a[i].x, &a[i].f, &a[i].c); sort(a+,a++n,cmp); memset(f,0x3f3f3f3f,sizeof(f)); f[]=; ; i<=n; i++){ , tail=; LL dis=a[i].x-a[i-].x; q[tail].v=,q[tail].val=,tail++; ; j<=K; j++){ LL now=f[j]-(LL)j*a[i].c+dis*(LL)j*(LL)j; ].val>=now) tail--; q[tail].v=j, q[tail].val=now, tail++; while (head<tail && q[head].v+a[i].f<j) head++; f[j]=q[head].val+(LL)j*a[i].c; } } printf("%lld\n", f[K]+(LL)K*(LL)K*(LL)(end-a[n].x)); ; }
2060
树形dp的入门水题。。
f[u]表示选u的最大值
g[u]表示不选u的最大值
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; ; struct node{ int to,next; }e[maxn]; int g[maxn],f[maxn],n,head[maxn],tot,u,v; void insert(int u, int v){ e[++tot].to=v; e[tot].next=head[u]; head[u]=tot; } void dfs(int x, int fa){ g[x]=; f[x]=; ; i=e[i].next){ int v=e[i].to; if (v==fa) continue; dfs(v,x); g[x]+=max(g[v],f[v]); f[x]+=g[v]; } } int main(){ scanf("%d", &n); tot=; memset(head,-,sizeof(head)); ; i<n; i++){ scanf("%d%d", &u, &v); insert(u,v); insert(v,u); } dfs(,); printf(],f[])); ; }
bzoj 2058+2059+2060 Usaco2010 Nov的更多相关文章
- BZOJ 2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛( dp )
树形dp..水 ------------------------------------------------------------------------ #include<cstdio& ...
- 2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛
2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 252 Solved: 1 ...
- 【BZOJ】2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛(树形dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=2060 裸的树形dp d[x][1]表示访问x的数量,d[x][0]表示不访问x的数量 d[x][1] ...
- 【BZOJ】2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛
[算法]树形DP [题解]没有上司的舞会?233 f[x][0]=∑max(f[v][0],f[v][1]) f[x][1]=(∑f[v][0])+1 #include<cstdio> # ...
- bzoj 2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛【树形dp】
设f[u][0/1]为u这个点不选/选,转移的时候从儿子转移,f[u][1]=sum(f[son][0])+1,f[u][0]=sum(max(f[son][0],f[e[i].to][1])) #i ...
- BZOJ 2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛 树形DP
Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) ...
- Bzoj 2058: [Usaco2010 Nov]Cow Photographs 题解
2058: [Usaco2010 Nov]Cow Photographs Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 190 Solved: 104[ ...
- BZOJ_2058_[Usaco2010 Nov]Cow Photographs_逆序对
BZOJ_2058_[Usaco2010 Nov]Cow Photographs_逆序对 题意: 奶牛的图片 Farmer John希望给他的N(1<=N<=100,000)只奶牛拍照片, ...
- [bzoj2058][Usaco2010 Nov]Cow Photographs_树状数组_动态规划
Cow Photographs bzoj-2058 Usaco-2010 Nov 题目大意:给定一个n的排列.每次操作可以交换相邻两个数.问将序列变成一个:$i,i+1,i+2,...,n,1,2,. ...
随机推荐
- css动画 animation
今天用css做了一个简单的三角上下移动的一个小动画,说白了就是在改变该物体的height值.除了这个方法,还可以用js. 一.在用css写动画时,一定要记住兼容性问题.如何解决该兼容性?在前面加内核前 ...
- jquery 页面加载时获取图片高度
$(function () { $(window).load(function(){ alert($('img').height()); }); });
- 教你摸清 Linux PC 的性能底细?
导读 基准测试是一项测试或一系列测试,用来确定某个计算机硬件运行起来的状况有多好.在许多情况下,“基准测试”实际上等同于“压力测试”.通过测试硬件的极限,然后可以将测得的结果与其他硬件测得的结果作一番 ...
- php文件类
1.需求 了解php对文件的一些操作 2.例子 写了一个类,可以操作文件,包含增,删,查 <?php class myfile{ public function write_file($stri ...
- C段渗透+cain嗅探
其实吧这篇文件也是一个大概的了解和思路篇...没什么技术含量,但是你可以你可以从思路中来获得;其他的技术都是靠自己去摸索,我说了半天还是别人的,不如自己直接试试,这样效果比我直接告诉你的更加的深刻.. ...
- 调用webservice 总结
最近做一个项目,由于是在别人框架里开发app,导致了很多限制,其中一个就是不能直接引用webservice . 我们都知道,调用webserivice 最简单的方法就是在 "引用" ...
- HDU 4859 海岸线(最大流最小割)
难得的中文题,就不翻译了. 输入第一行为T,表示有T组测试数据.每组数据以两个整数N和M开始,表示地图的规模.接下来的N行,每一行包含一个长度为M的字符串,表示地图,‘.’表示陆地,’E’表示浅海域, ...
- 【目录】Leetcode
Leetcode 1.动态规划 Palindrome Partitioning II(hard) ☆ Distinct Subsequences(hard) Edit Distance (hard) ...
- 《C#高级编程(第六版)》泛型学习笔记(一):泛型优点和特性 (转载)
原文出处:http://www.cnblogs.com/xun126/archive/2011/01/13/1933838.html 泛型是CLR 2.0的一个新特性,在CLR 1.0中,要创建一个灵 ...
- 【转】Caffe初试(六)激活层及参数
在激活层中,对输入数据进行激活操作(实际上就是一种函数变换),是逐元素进行运算的.从bottom得到一个blob数据输入,运算后,从top输入一个blob数据.在运算过程中,没有改变数据的大小,即输入 ...