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,. ...
 
随机推荐
- UIScrollView无法滚动的解决办法
			
如果UIScrollView无法滚动,可能是以下原因: 没有设置contentSize scrollEnabled = NO 没有接收到触摸事件:userInteractionEnabled = NO ...
 - [Python] 利用Django进行Web开发系列(一)
			
1 写在前面 在没有接触互联网这个行业的时候,我就一直很好奇网站是怎么构建的.现在虽然从事互联网相关的工作,但是也一直没有接触过Web开发之类的东西,但是兴趣终归还是要有的,而且是需要自己动手去实践的 ...
 - javascript基础03
			
javascript基础03 1. 算术运算符 后增量/后减量运算符 ++ ,-- 比较运算符 ( >, <, >=, <=, ==, !=,===,!== ) 逻辑运算符( ...
 - 【Network】高性能 UDP 应该怎么做?
			
参考资料: EPOLL-UDP-GOLANG golang udp epoll - Google 搜索 go - golang: working with multiple client/server ...
 - ASM:《X86汇编语言-从实模式到保护模式》第16章:Intel处理器的分页机制和动态页面分配
			
第16章讲的是分页机制和动态页面分配的问题,说实话这个一开始接触是会把人绕晕的,但是这个的确太重要了,有了分页机制内存管理就变得很简单,而且能直接实现平坦模式. ★PART1:Intel X86基础分 ...
 - Spring Schedule 任务调度实现
			
我们都知道任务调度可以用Quartz,但对于简单的定时任务,可以直接用Spring内置的Schedule来实现.可以由两种方式,注释+XML配置 注解方式: 注解也要先在sping.xml配置文件中配 ...
 - node06-path
			
目录:node01-创建服务器 node02-util node03-events node04-buffer node05-fs node06-path node07-http node08-exp ...
 - SQL中inner join、outer join和cross join的区别
			
对于SQL中inner join.outer join和cross join的区别简介:现有两张表,Table A 是左边的表.Table B 是右边的表.其各有四条记录,其中有两条记录name是相同 ...
 - Caffe初试(三)使用caffe的cifar10网络模型训练自己的图片数据
			
由于我涉及一个车牌识别系统的项目,计划使用深度学习库caffe对车牌字符进行识别.刚开始接触caffe,打算先将示例中的每个网络模型都拿出来用用,当然这样暴力的使用是不会有好结果的- -||| ,所以 ...
 - SQL入门语句之INSERT、UPDATE和DELETE
			
一.SQL入门语句之INSERT insert语句的功能是向数据库的某个表中插入一个新的数据行 1.根据对应的字段插入相对应的值 insert into table_name(字段A, 字段B, 字段 ...