9.29 奶牛练习题

/*bzoj 1613*/
/*暴力5884ms*/
#include<cstdio>
#define maxn 10010
using namespace std;
int n,m,a[maxn],f[maxn][510];
int max(int x,int y){
    return x>y?x:y;
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    for(int i=1;i<=n;i++)
        for(int j=0;j<=m;j++){
            if(j>0)f[i][j]=max(f[i][j],f[i-1][j-1]+a[i]);
            if(i-j>=0)for(int k=0;k<=j;k++)f[i][0]=max(f[i][0],f[i-j][k]);
        }
    printf("%d\n",f[n][0]);
    return 0;
}
/*简单优化224ms*/
#include<cstdio>
#define maxn 10010
using namespace std;
int n,m,a[maxn],f[maxn][510];
int max(int x,int y){
    return x>y?x:y;
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    for(int i=1;i<=n;i++)
        for(int j=0;j<=m;j++){
            if(j>0)f[i][j]=max(f[i][j],f[i-1][j-1]+a[i]);
            if(i-j>=0)f[i][0]=max(f[i][0],max(f[i-j][j],f[i-1][0]));
        }
    printf("%d\n",f[n][0]);
    return 0;
}

/*bzoj 1614 二分*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define maxn 1010
#define inf 0x3f3f3f3f
using namespace std;
int n,m,k,num,head[maxn],f[maxn],dis[maxn],l,r,ans;
struct node{
    int v,t,pre;
}e[maxn*20];
queue<int>q;
int init(){
    int x=0;char s=getchar();
    while(s<‘0‘||s>‘9‘)s=getchar();
    while(s>=‘0‘&&s<=‘9‘){x=x*10+s-‘0‘;s=getchar();}
    return x;
}
void Add(int from,int to,int dis){
    num++;e[num].v=to;
    e[num].t=dis;
    e[num].pre=head[from];
    head[from]=num;
}
bool SPFA(int x){
    for(int i=1;i<=n;i++)dis[i]=inf;
    q.push(1);f[1]=1;dis[1]=0;
    while(!q.empty()){
        int k=q.front();
        q.pop();f[k]=0;
        for(int i=head[k];i;i=e[i].pre){
            int v=e[i].v,cost=0;
            if(e[i].t>x)cost++;
            if(dis[v]>dis[k]+cost){
                dis[v]=dis[k]+cost;
                if(f[v]==0){
                    q.push(v);f[v]=1;
                }
            }
        }
    }
    return dis[n]<=k;
}
int main()
{
    n=init();m=init();k=init();
    int u,v,t;
    for(int i=1;i<=m;i++){
        u=init();v=init();t=init();
        Add(u,v,t);Add(v,u,t);r=max(r,t);
    }
    ans=-1;
    while(l<=r){
        int mid=(l+r)/2;
        if(SPFA(mid)){
            r=mid-1;
            ans=mid;
        }
        else l=mid+1;
    }
    printf("%d\n",ans);
    return 0;
}

/*bzoj 1609 记忆化*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 30010
using namespace std;
int n,a[maxn],f1[maxn][4],f2[maxn][4];
int Dfs1(int now,int lim){
    if(f1[now][lim]!=-1)return f1[now][lim];
    if(now==n+1)return 0;
    int r=0x7fffffff;
    if(a[now]>=lim)r=min(r,Dfs1(now+1,a[now]));
    r=min(r,Dfs1(now+1,lim)+1);
    return f1[now][lim]=r;
}
int Dfs2(int now,int lim){
    if(f2[now][lim]!=-1)return f2[now][lim];
    if(now==n+1)return 0;
    int r=0x7fffffff;
    if(a[now]<=lim)r=min(r,Dfs2(now+1,a[now]));
    r=min(r,Dfs2(now+1,lim)+1);
    return f2[now][lim]=r;
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    memset(f1,-1,sizeof(f1));
    memset(f2,-1,sizeof(f2));
    printf("%d\n",min(Dfs1(1,0),Dfs2(1,4)));
}

/*bzoj 1610 模拟*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 210
using namespace std;
int n,x[maxn],y[maxn],ans;
bool f[maxn*10][maxn*10][2];
int Abs(int x){
    return x<0?-x:x;
}
int Gcd(int a,int b){
    return b==0?a:Gcd(b,a%b);
}
void Insert(int a,int b){
    int c=0;
    if(a==0)b=1;
    else if(b==0)a=1;
    else{
        if(a*b<0)c=1;
        int A=Abs(a),B=Abs(b);
        int gcd=Gcd(A,B);
        a=A/gcd;b=B/gcd;
    }
    if(f[a][b][c]==0)ans++;
    f[a][b][c]=1;
}
int main()
{
    //freopen("lines.in","r",stdin);
    //freopen("lines.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d%d",&x[i],&y[i]);
    for(int i=1;i<=n;i++)
        for(int j=i+1;j<=n;j++){
            int X=x[i]-x[j];
            int Y=y[i]-y[j];
            Insert(X,Y);
        }
    printf("%d\n",ans);
    return 0;
} 
时间: 2024-10-14 16:39:09

9.29 奶牛练习题的相关文章

存储器的层次结构学习记录

重要知识点 三种常见的存储技术 RAM,ROM,磁盘. 随机访问存储器(RAM) 分类:静态RAM(SRAM)和动态RAM(DRAM). 两类RAM区别:静态RAM比动态RAM更快,但也贵得多且功耗更大. SRAM的特点:SRAM每个位都存储在一个双稳态的存储器单元里,因此其存储单元具有双稳态特性,只要有电,它就会永远保持它的值.即使有干扰,例如:电子噪音,来扰乱电路,当干扰消除时,电路就会恢复到稳定值. DRAM的特点:DRAM将每一个位存储为对每个电容的充电.所以其存储器单元对干扰非常敏感.

2104.10.29模拟赛【奶牛编号】

2.奶牛编号 [问题描述] 作为一个神秘的电脑高手,Farmer John 用二进制数字标识他的奶牛.      然而,他有点迷信,标识奶牛用的二进制数字,必须只含有K位“1” (1 <= K <= 10). 当然,每个标识数字的首位必须为“1”.      FJ按递增的顺序,安排标识数字,开始是最小可行的标识数字 (由“1”组成的一个K位数).      不幸的是,他没有记录下标识数字.请帮他计算,第N个标识数字 (1 <= N <= 10^7). [输入] 第1行:空格隔开的两

JAVA 基础编程练习题29 【程序 29 求矩阵对角线之和】

29 [程序 29 求矩阵对角线之和] 题目:求一个 3*3 矩阵对角线元素之和 程序分析:利用双重 for 循环控制输入二维数组,再将 a[i][i]累加后输出. package cskaoyan; public class cskaoyan29 { @org.junit.Test public void diagonal() { java.util.Scanner in = new java.util.Scanner(System.in); int[][] arr = new int[3][

[Lab4-1]抓路由练习题

[Lab4-1]抓路由练习题 问题1: 用ACL抓取172.18.0.0/16----172.29.0.0/16的路由 答案: 172.16.0.0 0.15.255.255,看上去很完美,但实际上框的范围有些大. R1(f0/0)-(f0/0)R2 R1上的接口地址: R1#sh ip int b Interface IP-Address OK? Method Status Protocol FastEthernet0/0 12.1.1.1 YES NVRAM up up Loopback0

hdu 1166:敌兵布阵(树状数组,练习题)

敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 37773    Accepted Submission(s): 15923 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就

codevs 3060 抓住那头奶牛 x

3060 抓住那头奶牛 USACO 时间限制: 1 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题目描述 Description 农夫约翰被告知一头逃跑奶牛的位置,想要立即抓住它,他开始在数轴的N 点(0≤N≤100000),奶牛在同一个数轴的K 点(0≤K≤100000). 约翰有两种移动方式:1 分钟内从x 点移动到x+1 或x-1:1 分钟内从x 点移动到2x.假设奶牛不会移动,约翰抓住它需要多少时间? 输入描述 Input Description 一行两个整数N 和K

算法训练 安慰奶牛 &#160; 最小生成树

问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场都是一个奶牛的家.FJ计划除去P条道路中尽可能多的道路,但是还要保持牧场之间 的连通性.你首先要决定那些道路是需要保留的N-1条道路.第j条双向道路连接了牧场Sj和Ej(1 <= Sj <= N; 1 <= Ej <= N; Sj != Ej),而且走完它需要Lj的时间.没有两个牧场是被一条以上的道路所连接.奶牛们非常伤心,因为她们的交通系

算法--三色排序练习题

三色排序练习题 第17节 三色排序练习题 有一个只由0,1,2三种元素构成的整数数组,请使用交换.原地排序而不是使用计数进行排序. 给定一个只含0,1,2的整数数组A及它的大小,请返回排序后的数组.保证数组大小小于等于500. 测试样例: [0,1,1,0,2,2],6 返回:[0,0,1,1,2,2] Java (javac 1.7) 代码自动补全 1 import java.util.*; 2 3 public class ThreeColor { 4 public int[] sortTh

tr命令的使用及相关练习题

tr命令相关选项: tr-转换或删除字符 常用选项: -c:取字符集的补集 -d:删除匹配的指定字符集中的字符 -s:把连续重复的字符以单独一个字符表示 -t:先删除第一字符集较第二字符集多出的字符 \\:反斜杠 \a:响铃 \b:退格 \n:换行 \r:回车 [:alnum:] :所有的字母和数字                                                 [:alpha:] :所有的字母