hdu5303(排序+dp)

链接:点击打开链接

题意:有一个长为L的环,n个苹果树,一个篮子最多装k个苹果,装满后要回到起点重新出发,给出n个苹果树顺时针的位置及苹果的个数,求摘完所有苹果走的最小路程

代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
using namespace std;
const long long INF=0x3f3f3f3f3f3f3f3f;
struct node{
    long long x,y;
    friend bool operator<(node a,node b){
        return a.x<b.x;
    }
}s[100005];
long long dp[2][100005];
int main(){                                     //dp[0][j]表示顺时针拿j个苹果返回起点的最短距离
    long long t,i,j,l,n,k,ans,num,sum;          dp[1][j]表示逆时针拿j个苹果返回起点的最短距离
    scanf("%I64d",&t);
    while(t--){
        scanf("%I64d%I64d%I64d",&l,&n,&k);
        memset(dp,0,sizeof(dp));
        sum=0;
        for(i=1;i<=n;i++){
        scanf("%I64d%I64d",&s[i].x,&s[i].y);
        sum+=s[i].y;
        }
        sort(s+1,s+n+1);                        //按位置排序
        num=1;
        for(i=1;i<=n;i++){
            for(j=1;j<=s[i].y;j++){
                if(num>k){                      //判断是否大于k和是原路返回近还是绕圈近
                    if(2*s[i].x<l)
                    dp[0][num]=dp[0][num-k]+2*s[i].x;
                    else
                    dp[0][num]=dp[0][num-k]+l;
                }
                else{
                    if(2*s[i].x<l)
                    dp[0][num]=dp[0][0]+2*s[i].x;
                    else
                    dp[0][num]=dp[0][0]+l;
                }
                num++;                          
            }
        }
        num=1;
        for(i=n;i>=1;i--){
            for(j=1;j<=s[i].y;j++){
                if(num>k){
                    if(2*(l-s[i].x)<l)
                    dp[1][num]=dp[1][num-k]+2*(l-s[i].x);
                    else
                    dp[1][num]=dp[1][num-k]+l;
                }
                else{
                    if(2*(l-s[i].x)<l)
                    dp[1][num]=dp[1][0]+2*(l-s[i].x);
                    else
                    dp[1][num]=dp[1][0]+l;
                }
                num++;
            }
        }
        ans=INF;
        for(i=0;i<=sum;i++)
        ans=min(ans,dp[0][i]+dp[1][sum-i]);
        printf("%I64d\n",ans);
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目 录<br><br>第一章MYSQL入门与初步 1<br>1.1 MYSQL简介 2<br>1.1.1 MySQL是什么? 2<br>1.1.2 我需要MySQL吗? 3<br>1.1.3 我需要付钱吗? 4<br>1.1.4 如何得到MySQL? 4<br>1.1.5总结 5<br>1.2 关系数据库管理系统 5<br>1.2.1 关系数据库系统 6<br>1.2.2 数据库系统的发展 7<br>1.2.3 与数据库系统通讯 8<br>1.2.4 MySQL的体系结构 8<br>1.2.5总结 8<br>1.3 MYSQL使用的SQL语言 9<br>1.3.1 表、列和数据类型 9<br>1.3.2函数 9<br>1.3.3 SQL的语句 9<br>1.3.4总结 10<br>1.4 MYSQL数据处理 10<br>1.4.1 MySQL的数据 10<br>1.4.1.1、字符串值 10<br>1.4.1.2数字值 11<br>1.4.1.3十六进制值 12<br>1.4.1.4日期和时间值 12<br>1.4.1.4 NULL值 12<br>1.4.2列类型概述 12<br>1.4.3 数字列类型 14<br>1.4.3.1整数类型 15<br>1.4.3.2浮点数类型 16<br>1.4.4 日期和时间类型 18<br>1.4.4.1 Y2K问题和日期类型 18<br>1.4.4.2 DATETIME,DATE和TIMESTAMP类型 18<br>1.4.4.3 TIME类型 19<br>1.4.4.4 YEAR类型 20<br>1.4.5 字符串类型 20<br>1.4.5.1 CHAR和VARCHAR类型 21<br>1.4.5.2 BLOB和TEXT类型 23<br>1.4.5.3 ENUM和SET类型 24<br>1.4.6总结 26<br>第二章 MySQL安装 27<br>2.1 MYSQL系统的安装布局 28<br>2.1.1 二进制安装 28<br>2.1.2 RPM安装 28<br>2.1.3 源代码安装 28<br>2.1.4总结 29<br>2.2 安装MYSQL系统的分发 29<br>2.2.1 在Windows下的安装一个二进制分装 29<br>2.2.2 在Windows NT/2000下安装成系统服务 29<br>2.2.3 在Linux下安装一个RPM分发 31<br>2.2.4 在Linux下安装二进制分发 31<br>2.2.5 在Linux下安装源代码分发 32<br>2.2.6 总结 32<br>2.3 安装后期的的设置与测试 33<br>2.3.1建立启动MySQL的帐户 33<br>2.3.2 初始化授权表 33<br>2.3.3 测试服务器是否工作 34<br>2.3.4 自动运行和停止MySQL 36<br>2.3.5 更改root用户的密码 38<br>2.3.6 修改选项文件 38<br>2.3.7总结 41<br>2.4 系统的升 41<br>2.4.1 备份数据库与其他配置文件 41<br>2.4.2 重新安装二进制分发 41<br>2.4.3重新安装源代码分发 41<br>2.4.4 升一个RPM分发 42<br>2.4.5 检查数据库是否工作及完整 42<br>2.4.6总结 42<br>2.5在同一台机器上运行多个MYSQL服务器 42<br>2.5.1使用重新编译的方法 42<br>2.5.2使用指定服务器参数的方法 43<br>2.5.3有关选项文件的问题 44<br>2.5.4 总结 44<br>第三章 数据库的基本操作 46<br>3.1 MYSQL的启动与终止 47<br>3.1.1 直接运行守护程序 47<br>3.1.2 使用脚本mysql.server启动关闭数据库 48<br>3.1.3 使用mysqladmin实用程序关闭、重启数据库 49<br>3.1.4 启动或停止NT平台上的系统服务 50<br>3.1.5 使用选项文件提供服务器的参数 51<br>3.1.6 总结 51<br>3.2 MYSQL与客户机的连接 51<br>3.2.1建立和中止与服务器的连接 52<br>3.2.2利用选项文件简化连接 53<br>3.2.3 利用 mysql 的输入行编辑器 54<br>3.2.4 批处理模式连接 55<br>3.2.5 总结 56<br>3.3 有关数据库的操作 56<br>3.3.1 用SHOW显示已有的数据库 56<br>3.3.2 用Create Dabase 创建数据库 57<br>3.3.3 用DROP DATABASE删除数据库 57<br>3.3.4 使用mysqladmin工具创建和删除 58<br>3.3.5 直接在数据库目录中创建或删除 58<br>3.3.6 用USE选用数据库 58<br>3.3.7 总结 58<br>3.4 有关数据表的操作 59<br>3.4.1 用SHOW/ DESCRIBE语句显示数据表的信息 59<br>3.4.2 使用mysqlshow 工具得到信息 60<br>3.4.3 用CREATE TABLE 语句创建数据表 60<br>3.4.4利用 SELECT 的结果创建表 62<br>3.4.5 用ALTER TABLE语句修改表的结构 63<br>3.4.6 用DROP TABLE 语句删除数据表 64<br>3.4.7 总结 64<br>3.5 向数据表插入行记录 64<br>3.5.1 使用INSERT语句插入新数据 64<br>3.5.2 使用INSERT…SELECT语句插入从其他表选择的行 65<br>3.5.3 使用replace、replace…select语句插入 66<br>3.5.4 使用LOAD语句批量录入数据 66<br>3.5.5 总结 68<br>3.6 查询数据表中的记录 69<br>3.6.1 普通查询 69<br>3.6.2 条件查询 71<br>3.6.3 查询排序 73<br>3.6.4 查询分组与行计数 75<br>3.6.5 查询多个表 77<br>3.3.6总结 78<br>3.7 修改、删除数据记录 79<br>3.7.1 用update修改记录 79<br>3.7.2 用delete删除记录 79<br>3.7.3 总结 79<br>第四章 MYSQL特性 81<br>4.1 集合函数 82<br>4.1.1 行列计数 82<br>4.1.2统计字段值的数目 82<br>4.1.3 计算字段的平均值 83<br>4.1.4 计算字段值的和 84<br>4.1.5 计算字段值的极值 84<br>4.1.6 总结 86<br>4.2 操作日期和时间 86<br>4.2.1 返回当前日期和时间 86<br>4.2.2 自动记录数据的改变时间 88<br>4.2.3 返回日期和时间范围 90<br>4.2.5 比较日期和时间 92<br>4.3 字符串模式匹配 93<br>4.3.1 标准的SQL模式匹配 93<br>4.3.2 扩展正则表达式模式匹配 94<br>4.3.3 总结 96<br>4.4 深入SELECT的查询功能 96<br>4.4.1 列和表的别名 96<br>4.4.1.1列的别名 96<br>4.4.1.2 在子句中使用列的别名 98<br>4.4.1.3表的别名 98<br>4.4.2 取出互不相同的记录 99<br>4.4.3 NULL值的问题 100<br>4.4.4 大小写敏感性 102<br>4.4.5 检索语句与多个表的连接 102<br>4.4.5.1 全连接 103<br>4.4.5.2 左连接 105<br>4.4.6 总结 108<br>4.5 索引属性 108<br>4.5.1 索引的特点 108<br>4.5.2 用Alter Table语句创建与删除索引 109<br>4.5.3 用CREATE\DROP INDEX创建索引 110<br>4.5.4 在创建表时指定索引 111<br>4.5.5 总结 113<br>第五章 数据库的备份与恢复 114<br>5.1 数据库目录 115<br>5.1.1 数据目录的位置 115<br>5.1.2 数据库的表示法 116<br>5.1.3 数据库表的表示法 117<br>5.1.4 MySQL的状态文件 118<br>5.1.5 总结 120<br>5.2 重定位数据库目录的内容 120<br>5.2.3 重定位方法 120<br>5.2.1 重定位数据目录 121<br>5.2.2 重定位数据库 121<br>5.2.3 重定位数据库表 122<br>5.2.4 重定位状态文件 122<br>5.2.5 总结 123<br>5.3 备份和恢复数据表的方法 123<br>5.3.1 使用SQL语句备份和恢复 123<br>5.3.2使用mysqlimport恢复数据 125<br>5.3.3 使用mysqldump备份数据 126<br>5.3.4 用直接拷贝的方法备份恢复 129<br>5.3.5 总结 129<br>5.4 使用更新日志文件 130<br>5.4.1 启用日志 130<br>5.4.2 重写日志 130<br>5.4.3 恢复日志内容 130<br>5.4.4 总结 131<br>5.5 使用MYSQL内建复制功能 131<br>5.5.1 配置主服务器 131<br>5.5.2 配置从服务器 132<br>5.5.3 创建相互的主从关系 133<br>5.5.4 总结 133<br>5.5 总结:备份恢复数据的一般步骤 133<br>第六章 数据库的维护与修复 136<br>6.1 数据库表的检查、修复与优化 137<br>6.1.1 数据库表的维护工具 137<br>6.1.2 检查数据库表 138<br>6.1.3 修复数据库表 139<br>6.1.4优化数据库表 140<br>6.1.5指定维护过程中使用的内存 141<br>6.1.6总结 141<br>6.2 避免与 MYSQL 服务器交互作用 142<br>6.2.1锁定表的的方法 142<br>6.2.2 检查表的锁定协议 143<br>6.2.3 修复表的锁定协议 143<br>6.2.4 总结 144<br>6.3日志文件维护 144<br>6.3.1如何使用新的更新日志 144<br>6.3.2如何使用新的常规日志 145<br>6.3.3 总结 145<br>6.4 建立日常维护规范 145<br>6.4.1 建立一个数据库表维护规范 145<br>6.4.2 创建一个适用于定期维护的脚本 145<br>6.4.3 在unix中用cron定期检查表 146<br>6.3.4 在系统启动期间检查表 147<br>6.3.5 总结 148<br>第七章 数据库安全 149<br>7.1 MYSQL的权限系统 150<br>7.1.1授权表的结构 150<br>7.1.1.1授权表user、db和host的结构和作用 150<br>7.1.1.2授权表tables_priv和columns_priv的结构和作用 151<br>7.1.2用户的权限 152<br>7.1.2.1数据库和表的权限 152<br>7.1.2.2管理权限 153<br>7.1.3授权表列的内容 153<br>7.1.3.1作用域列内容 153<br>7.1.3.2授权表User、Db和Host的权限列的内容 155<br>7.1.3.3授权表tables_priv和columns_priv的权限列的内容 155<br>7.1.4权限系统工作原理 155<br>7.1.4.1权限系统工作的一般过程 155<br>7.1.4.2存取控制, 阶段1:连接证实 156<br>7.1.4.3存取控制,阶段2:请求证实 159<br>7.1.5 总结 161<br>7.2 设置用户与并授权 162<br>7.2.1使用SHOW GRANTS语句显示用户的授权 162<br>7.2.2 使用GRANT语句创建用户并授权 162<br>7.2.2.1 GRANT语句的语法 162<br>7.2.2.2创建用户并授权的实例 164<br>7.2.3 直接修改授权表创建用户并授权 164<br>7.2.4 总结 165<br>7.3 撤销用户与授权 165<br>7.3.1 使用REVOKE语句撤销授权 165<br>7.3.2 直接修改授权表撤销用户或授权 166<br>7.3.3 总结 167<br>7.4 设置密码 167<br>7.4.1 使用myadmin实用程序 167<br>7.4.2使用语句SET PASSWORD 168<br>7.4.3 直接修改授权表 168<br>7.4.4 重新设置一个遗忘的root口令 168<br>7.4.5 总结 169<br>7.5 权限修改何时生效 169<br>7.5.1 服务器重新启动的情况 170<br>7.5.2 被服务器立即应用的情况 170<br>7.5.3 直接修改授权表的情况 170<br>7.5.4 对现有客户连接的影响情况 170<br>7.5.5 总结 170<br>7.6 授权原则 170<br>7.6.1 只有root用户拥有授权表的改写权 170<br>7.6.2 关于用户、口令及主机的设置 171<br>7.6.3 授予用户合适的权限 171<br>7.6.4 MySQL权限系统无法完成的任务 173<br>7.6.5 总结 173<br>7.7 MYSQL的其它安全问题 173<br>7.7.1 不在客户机的命令行上提供密码 173<br>1可以在命令行上提供密码 173<br>7.7.2 使用SSH加密客户机连接 174<br>7.7.3不要使用Unix的root用户运行MySQL守护进程 174<br>7.7.4数据库目录的安全 174<br>7.7.4.1可能的安全漏洞 174<br>7.7.4.2在Unix设置合适的数据库目录权限 175<br>7.7.4.3在NT系统中设置合适的数据库目录权限 175<br>7.7.5影响安全的mysqld选项 175<br>7.7.6 总结 176<br>第八章 数据库优化 177<br>8.1 索引的使用 178<br>8.1.1索引对单个表查询的影响 178<br>8.1.2索引对多个表查询的影响 180<br>8.1.3多列索引对查询的影响 181<br>8.1.4索引的作用 182<br>8.1.5 索引的弊端 182<br>8.1.6 选择索引的准则 183<br>8.1.7 总结 184<br>8.2 数据类型的问题 184<br>8.2.1 有助于效率的类型选择 184<br>8.2.2 有关BLOB和TEXT类型 185<br>8.2.3 使用ANALYSE过程检查表列 186<br>8.2.3 总结 187<br>8.3 SQL查询的优化 187<br>8.3.1 使用EXPLAIN语句检查SQL语句 187<br>8.3.2 SELECT 查询的速度 188<br>8.3.2.1 MySQL怎样优化WHERE子句 188<br>8.3.2.2 MySQL怎样优化LEFT JOIN 190<br>8.3.2.3 MySQL怎样优化LIMIT 190<br>8.3.4 记录转载和修改的速度 191<br>8.3.4.1 INSERT查询的速度 191<br>8.3.4.2 UPDATE查询的速度 193<br>8.3.4.3 DELETE查询的速度 193<br>8.3.4索引对有效装载数据的影响 193<br>8.3.5 总结 194<br>8.4 数据库表的处理 194<br>8.4.1 选择一种表类型 194<br>8.4.1.1 静态(定长)表的特点 195<br>8.4.1.2 动态表的特点 196<br>8.4.1.3 压缩表的特点 196<br>8.4.1.4 内存表的特点 197<br>8.4.2 数据库表的数量的问题 197<br>8.4.3 数据库表锁定的问题 198<br>1、对此一个主要的问题如下: 198<br>2、INSERT DELAYED 在客户机方的作用 199<br>8.4.4 对表进行优化 200<br>8.4.5 总结 201<br>8.5 服务器优化 201<br>8.5.1 磁盘问题 201<br>8.5.2硬件问题 202<br>8.5.3 服务器参数的选择 202<br>8.5.4编译和链接怎样影响MySQL的速度 203<br>8.5.5 总结 203<br>思考题答案 206<br>附录一 MYSQL 语言参考 217<br>1.1 数据类型参考:怎么写字符串和数字 217<br>1.1.1 字符串 217<br>1.1.2 数字 219<br>1.1.3 十六进制值 219<br>1.1.4 NULL值 219<br>1.1.5 数据库、表、索引、列和别名的命名 220<br>1.1.5.1 名字的大小写敏感性 221<br>1.2 用户变量 222<br>1.3 列类型 222<br>1.3.1 列类型存储需求 225<br>数字类型 226<br>日期和时间类型 226<br>串类型 226<br>1.3.2 数字类型 227<br>1.3.3 日期和时间类型 229<br>1.3.3.1 Y2K问题和日期类型 230<br>1.3.3.2 DATETIME, DATE和TIMESTAMP类型 230<br>1.3.3.3 TIME类型 233<br>1.3.3.4 YEAR类型 234<br>1.3.4 字符串类型 234<br>1.3.4.1 CHAR和VARCHAR类型 234<br>1.3.4.2 BLOB和TEXT类型 235<br>1.3.4.3 ENUM类型 236<br>1.3.4.4 SET类型 237<br>1.3.5 为列选择正确的类型 238<br>1.3.6 列索引 238<br>1.3.7 多列索引 239<br>1.3.8 使用来自其他数据库引擎的列类型 239<br>1.4 用在SELECT和WHERE子句中的函数 240<br>1.4.1 分组函数 240<br>1.4.2 常用的算术操作 241<br>1.4.3 位函数 242<br>1.4.4 逻辑运算 242<br>1.4.5 比较运算符 243<br>1.4.6 字符串比较函数 246<br>1.4.7 类型转换运算符 248<br>1.4.8 控制流函数 248<br>1.4.9 数学函数 249<br>1.4.10 字符串函数 255<br>1.4.11 日期和时间函数 262<br>1.4.12 其他函数 269<br>1.4.13 与GROUP BY子句一起使用的函数 272<br>1.5 CREATE DATABASE句法 274<br>1.6 DROP DATABASE句法 274<br>1.7 CREATE TABLE句法 274<br>1.1.1 隐含的列说明改变 279<br>1.8 ALTER TABLE句法 280<br>1.9 OPTIMIZE TABLE句法 282<br>1.10 DROP TABLE句法 283<br>1.11 DELETE句法 283<br>1.12 SELECT句法 284<br>1.13 JOIN句法 286<br>1.14 INSERT句法 287<br>1.15 REPLACE句法 290<br>1.16 LOAD DATA INFILE句法 291<br>1.17 UPDATE句法 296<br>1.18 USE句法 297<br>1.20 KILL句法 298<br>1.22 EXPLAIN句法(得到关于SELECT的信息) 303<br>1.23 DESCRIBE句法 (得到列的信息) 307<br>1.24 LOCK TABLES/UNLOCK TABLES句法 308<br>1.25 SET OPTION句法 309<br>1.26 GRANT和REVOKE句法 310<br>1.27 CREATE INDEX句法 313<br>1.29 注释句法 314<br>1.30 CREATE FUNCTION/DROP FUNCTION句法 315<br> <br>2.1 各种MYSQL程序概述 318<br>myisamchk 318<br>make_binary_release 318<br>msql2mysql 318<br>mysql 318<br>mysqlaccess 319<br>mysqladmin 319<br>mysqlbug 319<br>mysqld 319<br>mysqldump 319<br>mysqlimport 319<br>mysqlshow 319<br>mysql_install_db 319<br>replace 319<br>safe_mysqld 319<br>2.2 MYSQLADMIN 319<br>2.3 MYSQLDUMP 320<br>2.4 MYSQLIMPORT 323<br>2.5 MYISAMPACK 324<br>2.6 MYISAMCHK 332<br><br><br>
要在Linux系统上进行MySQL 8.0源码安装,你可以按照以下步骤进行操作: 1. 下载源码包并解压:使用提供的下载地址下载源码包,并通过以下命令解压: tar -xf mysql-boost-8.0.18.tar.gz 2. 进入解压后的目录:使用cd命令进入解压后的源码目录: cd mysql-boost-8.0.18 3. 配置编译选项并进行编译安装:使用cmake命令配置编译选项,然后使用make命令进行编译,最后使用make install命令进行安装,具体命令如下: cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DSYSCONFDIR=/etc \ -DWITH_EXTRA_CHARSETS=all \ -DMYSQL_DATADIR=/data/mysql \ -DWITH_BOOST=/opt/mysql-8.0.18/boost \ -DFORCE_INSOURCE_BUILD=1 \ -DCMAKE_CXX_COMPILER=/usr/local/gcc-8.3.0/bin/g make make install 4. 创建mysql用户并赋予权限:使用以下命令创建mysql用户,并为配置文件中的相关目录和文件赋予mysql用户权限: useradd mysql chown -R mysql:mysql /usr/local/mysql chown -R mysql:mysql /data/mysql 5. 数据初始化并启动MySQL:使用以下命令进行数据初始化,并启动MySQL 8.0服务: cd /usr/local/mysql/bin/ ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql/ cp /opt/mysql-8.0.18/mysql-files/mysql.server /etc/init.d/ service mysql start 6. 验证登录:使用以下命令登录验证MySQL 8.0是否安装成功: mysql -u root -p 请注意,以上步骤仅适用于Linux系统。如果你使用的是其他操作系统,请参考相应的安装文档进行安装。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [mysql 8.0源码安装](https://blog.csdn.net/shitou_234/article/details/130488515)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [【MySQLMySQL 8.0 源码安装详解](https://blog.csdn.net/weixin_39974140/article/details/115005095)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值