51NOD 1125(交換機器最小代價) (貪心) 思想 !思想!

題目鏈接:?https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1125


1125?交換機器的最小代價
基準時間限制:1?秒 空間限制:131072?KB 分值:?80?難度:5級算法題
?收藏
?關注
有N臺機器重量各不相等,現在要求把這些機器按照重量排序,重量從左到右依次遞增。移動機器只能做交換操作,但交換機器要花費一定的費用,費用的大小就是交換機器重量的和。例如:3 2 1,交換1 3后為遞增排序,總的交換代價為4。給出N臺機器的重量,求將所有機器變為有序的最小代價。(機器的重量均為正整數)
Input
第1行:1個數N,表示機器及房間的數量。(2?<=?N?<=?50000)
第2?-?N?+?1行:每行1個數,表示機器的重量Wi。(1?<=?Wi?<=?10^9)
Output
輸出最小代價。
Input示例
3
3
2
1
Output示例
4


首先 ?數據量 并不弱, 5w*10^9 因此 ?必然要用 long long ?第一次沒


寫 過了13組 第二次 成員沒用 longlong 過了18組 ? - . ?- ?



題目大意: ? 既然是交換順序; ?

有兩種思路:

?在所有的 數據當中, ?我們把幾個有關聯(這幾個數交換得到正確位置)的數據放到一起, ?組成一個小組, ?這樣 所有數據, 就分成了 好幾個組 ? ,?

然后 我們 在對每一個組掃描的時候, 每次只會影響到當前這個數所在的小組,對其他小組不會造成影響, ?因此對于每一個小組

有兩種操作實現方式,:

?一個是 直接小組內成員交換, 另一個就是,我們借助另外一個特殊值,用特殊值依次實現交換,(這個值是特殊值,為了使重量最小, 所以這個特殊值必須是 全部數據中 最小的那個) 然后 兩種方式比較 選擇當前小組 中 最合適的方法;


?一是 ?用當前組下 小組內成員進行交換;

?二是 ?借助外力實現, 依次交換;







每次 我們選擇 兩個中最小的方法 比較 ?并且要注意; ?方法二中; 騰位子的 要多交換兩次; for 循環的目的,就是為了解決 多組的問題;

?

#include <iostream>
#include <queue>
#include <string>
#include <cstring>
#include <cmath>
#include <stdio.h>
#include <algorithm>typedef long long ll;using namespace std;
const int MAXN=50100;
struct mac{ll we;ll col;//位置} a[MAXN];int n;int vis[MAXN];ll pre;
int cmp(mac a,mac b)
{return a.we<b.we;
}
ll change(int i)// 當前狀態下最小換的
{ll sum=0;ll x,y,cont=0;x=a[i].we;y=a[i].col;while(i!=y){sum+=a[y].we;vis[y]=1;y=a[y].col;cont++;}sum=sum+min((cont*x),(pre*(cont+2)+x*2));return sum;
}
int main()
{int i,j;while(cin>>n){memset(a,0,sizeof(a));memset(vis,0,sizeof(vis));for(i=1;i<=n;i++){cin>>a[i].we;a[i].col=i;}sort(a+1,a+n+1,cmp);ll sum=0;pre=a[1].we;for(i=1;i<=n;i++){if(!vis[i]){vis[i]=1;sum+=change(i);}}cout<<sum<<endl;}return 0;
}



123

轉載于:https://www.cnblogs.com/sizaif/p/9078532.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254483.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254483.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254483.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《Python從小白到大牛》簡介

《Python從小白到大牛》已經上市&#xff01; 本書是一部系統論述Python編程語言、OOP編程思想以及函數式編程思想的立體化教程&#xff08;含紙質圖書、電子書、教學課件、源代碼與視頻教程&#xff09;。為便于讀者高效學習&#xff0c;快速掌握Python編程方法。本書作者精心…

c語言基礎知識_結構體訪問,共同體,枚舉類型

C語言結構體變量的引用&#xff1a;對于定義的結構體類型的普通變量&#xff0c;訪問其成員用圓點運算符&#xff08;“.”&#xff09;&#xff0c;標準訪問方式如下&#xff1a;   結構體變量名.成員名   對于定義為指向結構體的指針變量&#xff0c;用箭頭運算符&#x…

Wiener Filter維納濾波器halcon算子,持續更新

目錄gen_psf_defocusgen_psf_motionsimulate_defocussimulate_motionwiener_filterwiener_filter_nigen_psf_defocus 功能&#xff1a;產生一個均勻散焦模糊的脈沖相應。 gen_psf_motion 功能&#xff1a;產生一個&#xff08;線性&#xff09;運動模糊的脈沖相應。 simula…

【轉載】數據庫操作:添加、插入、更新語句

原始日期&#xff1a; 2016-07-22 12:03 SQL常用命令使用方法&#xff1a;(1) 數據記錄篩選&#xff1a;sql"select * from 數據表 where 字段名字段值 order by 字段名 [desc]"sql"select * from 數據表 where 字段名 like %字段值% order by 字段名 [desc]&qu…

webpack學習

全局安裝安裝webapck npm i webpack -g 現在我們就可以全局的使用webpack命令了 webpack中基礎的命令&#xff1a; webpack enter.js output.js --watch 這個命令是將enter.js打包成output.js&#xff0c;然后html只需要引用該文件就可以了看如下entry.js,這是簡單的js代碼。 /…

3D 相機halcon算子,持續更新

目錄add_scene_3d_cameraadd_scene_3d_instanceadd_scene_3d_labeladd_scene_3d_lightclear_scene_3dcreate_scene_3ddisplay_scene_3dget_display_scene_3d_inforemove_scene_3d_cameraremove_scene_3d_instanceremove_scene_3d_labelremove_scene_3d_lightrender_scene_3dset…

Selenium 中文API

Selenium 中文API 轉自&#xff1a;http://blog.csdn.net/lh9529/article/details/3946567 概念 Selenium 通過命令進行驅動。Selenium 可歸納為三種“風格”&#xff1a;動作、輔助和斷言。每一個命令調用就是下表中的一行。 命令 目標 值 動作(Actions)命令一般用于操作應用…

C# 特性(Attribute)

個人定義&#xff1a;不侵入對象的情況下&#xff0c;添加對象附注信息。 官方定義&#xff1a;將預定義的系統信息或用戶定義的自定義信息與目標元素相關聯。目標元素可以是程序集、類、構造函數、委托、枚舉、事件、字段、接口、方法、可移植可執行文件模 塊、參數、屬性 (…

收集js庫的網站

https://www.javascripting.com/view/redux

c語言中有關void,sizeof,結構體的一些問題

void[1]&#xff1a;void是C語言中的空類型&#xff0c;void的用途有二。 1、對函數返回的限定&#xff1b; 如果函數沒有返回值&#xff0c;則默認返回整數類型&#xff0c;而不是void類型。c有很嚴格的類型&#xff0c;不允許函數不加類型聲明&#xff0c;而編譯器則不這么認…

Drawing繪圖halcon算子,持續更新

目錄drag_region1drag_region2drag_region3draw_circledraw_circle_moddraw_ellipsedraw_ellipse_mod_draw_linedraw_line_moddraw_nurbsdraw_nurbs_interpdraw_nurbs_interp_moddraw_nurbs_moddraw_pointdraw_point_moddraw_polygondraw_rectangle1draw_rectangle1_moddraw_re…

搞明白這八個問題,Linux系統就好學多了

正在猶豫入坑Linux學習的同學或者已經入坑的同學&#xff0c;經常會問到這樣八個問題。今天&#xff0c;這些問題我都會一一解答&#xff0c;希望我的看法能幫助各位同學。常言道“好的開始是成功的一半”&#xff0c;如果你明白了以下八個問題&#xff0c;就能有一個很好的開始…

從ORA-27300,ORA-27301到ORA-00064

近期因為session數量添加&#xff0c;須要調整session&#xff0c;也就是要調整process參數。看是比較簡單的一個問題&#xff0c;卻遭遇了ORA-27300&#xff0c;ORA-27301。因為這個涉及到了有關內核參數kernel.sem的改動。以下是其詳細描寫敘述。1、故障現象OS版本號&#xf…

Halcon|讀取3D相機點云數據

Halcon|讀取3D相機點云數據 最近發現很多小伙伴在使用Halcon處理3D工業相機掃描結果的時候遇到了“如何讀取”的問題。一般的3D工業相機儲存數據的格式有txt格式、tif格式、csv格式、ply格式、ptx格式、bin格式、obj格式等。 txt格式 讀取txt文件生成3D模型一般需要分析txt文件…

FFMPEG解碼流程

1. 注冊所有容器格式和CODEC: av_register_all() 2. 打開文件: av_open_input_file() 3. 從文件中提取流信息: av_find_stream_info() 4. 窮舉所有的流&#xff0c;查找其中種類為CODEC_TYPE_VIDEO 5. 查找對應的解碼器: avcodec_find_decoder() 6. 打開編解碼器: avcodec_open…

linux用戶登錄指定目錄

一、創建用戶和用戶組 [rootweb4 lianyu]# groupadd lianyu [rootweb4 lianyu]# useradd lianyu -g lianyu [rootweb4 lianyu]# passwd lianyu二、用戶登錄指定目錄 [rootweb4 lianyu]# cd /home/lianyu [rootweb4 lianyu]# ls -a . .. .bash_history .bash_logout .bas…

轉載:說一下AI的前景吧

發信人: wdong (萬事休), 信區: Stock標 題: 說一下AI的前景吧這一波AI和前兩年的big data&#xff0c;根本就是兩回事。big data這一波&#xff0c;主要是用數據分析來支撐起各種現有系統的改進&#xff0c;包括銷售業績的提高和用戶體驗的提高等。AI當然也可以應用回這些領域…

藥片粘連物體的分割

藥片粘連物體的分割要求&#xff1a;圖片&#xff1a;處理程序&#xff1a;處理結果&#xff1a;要求&#xff1a; 將藥片分割&#xff0c;統計藥片數量。不能使用模板匹配。 圖片&#xff1a; 先看一下要處理的原圖&#xff1a; 處理程序&#xff1a; read_image (Image…

FFMPEG CODEC使用總結

分類&#xff1a; 視頻編解碼技術 2010-07-15 10:29 283人閱讀 評論(0) 收藏 舉報 ffmpeg里提供了很多的encoder&#xff0c;decoder&#xff0c;詳見avcodec.h里的枚舉變量CodecID。 宏定義 #define REGISTER_ENCODER(X,x) { / extern AVCodec x##_encoder; / …

java 鏈接mysql 產生500W數據模擬生成環境

java 插入數據到mysql 通過sqoop 導入到hive 中&#xff0c;kylin模擬見cube 時間和 數據膨脹率 kylin 數據插入到 HBase Kylin HBase 1.1.3 Hive 1.2.1 Hadoop 2.5.1 create table infoagetime( prod_name char(10), prod_id SMALLINT, ods_date DATE )數據格式 oPmgBZxldW …