POJ 3270 Cow Sorting 置换应用

本文探讨了如何通过一系列对换操作使无序数组按升序排列,并计算所需的最小花费。通过对换操作的成本进行分析,文章揭示了一种优化排序过程的方法,即在同一个循环内进行对换操作,以减少整体成本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


Cow Sorting
Time Limit: 2000MS Memory Limit: 65536K
Total Submissions: 5638 Accepted: 2144

Description

Farmer John's N (1 ≤ N ≤ 10,000) cows are lined up to be milked in the evening. Each cow has a unique "grumpiness" level in the range 1...100,000. Since grumpy cows are more likely to damage FJ's milking equipment, FJ would like to reorder the cows in line so they are lined up in increasing order of grumpiness. During this process, the places of any two cows (not necessarily adjacent) can be interchanged. Since grumpy cows are harder to move, it takes FJ a total of X+Y units of time to exchange two cows whose grumpiness levels are X and Y.

Please help FJ calculate the minimal time required to reorder the cows.

Input

Line 1: A single integer:  N
Lines 2.. N+1: Each line contains a single integer: line  i+1 describes the grumpiness of cow  i

Output

Line 1: A single line with the minimal time required to reorder the cows in increasing order of grumpiness.

Sample Input

3
2
3
1

Sample Output

7

Hint

2 3 1 : Initial order. 
2 1 3 : After interchanging cows with grumpiness 3 and 1 (time=1+3=4). 
1 2 3 : After interchanging cows with grumpiness 1 and 2 (time=2+1=3).

Source



给你一个无序数组,通过一系列对换使之有序。对换的花费是对换两个数的和。问最小花费是多少。
将原有的序列排序后,形成目标串,这样就与原串形成了置换。例如给你原串是4,2,8, 6,7,目标串是2,4,6,7,8。这样就形成了两个环(4,2)和(8,6,7)。当然最优解是在同一个环内进行交换,如果在环与环之间交换的话,会增加费用。如果环的长度为m,则需要交换次数最少是m-1才能排好序。花费是sum - min + (len - 1) * min。化简后为:
sum + (len - 2) * min。其中,sum为这个循环所有数字的和,len为长度,min为这个环里面最小的数字。
还有一种特殊情况,如果最小元素不在这个环里,那么就要用环外的这个最小元素与环内的元素进行交换,花费是sum + min + (len + 1) * smallest
其中,sum为这个循环所有数字的和,len为长度,min为这个环里面最小的数字,smallest是整个数列最小的数字。
.因此,对一个循环的排序,其代价是sum - min + (len - 1) * min和sum + min + (len + 1) * smallest之中小的那个数字。
//564K	547MS
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define inf 0x3f3f3f
#define M 10007
#define minn(a,b) a<b?a:b
using namespace std;
bool vis[M];
int first[M],last[M],minn,n,tot;//first为排序前的序列,last为排序后的序列,tot为环的个数,minn为整个序列的最小值
struct sa
{
    int len;//环的长度
    int minn;//环的最小值
}cir[M];
void dfs(int x)//寻找在同一个环中的元素
{
    for(int i=0;i<n;i++)//在排序前的元素中找
        if(!vis[i]&&x==first[i])//如果找到且没有访问过
        {
            vis[i]=true;
            cir[tot].len++;
            cir[tot].minn=min(cir[tot].minn,first[i]);
            dfs(last[i]);
        }
}
int main()
{
    scanf("%d",&n);
    minn=inf;tot=0;
    memset(vis,false,sizeof(vis));
    int ans=0;
    for(int i=0;i<n;i++)
    {
        scanf("%d",&first[i]);
        last[i]=first[i];
        ans+=first[i];//ans为总的价值
        minn=min(minn,first[i]);
    }
    sort(last,last+n);
    for(int i=0;i<n;i++)
    {
        if(vis[i])continue;//如果访问过,就访问下一个
        cir[tot].len=1;
        cir[tot].minn=first[i];
        vis[i]=true;
        dfs(last[i]);
        tot++;
    }
    for(int i=0;i<tot;i++)
        ans+=minn(cir[i].minn*(cir[i].len-2),minn*(cir[i].len+1)+cir[i].minn);//去两种情况中的最小值
    printf("%d\n",ans);
}


内容概要:《中文大模型基准测评2025年上半年报告》由SuperCLUE团队发布,详细评估了2025年上半年中文大模型的发展状况。报告涵盖了大模型的关键进展、国内外大模型全景图及差距、专项测评基准介绍等。通过SuperCLUE基准,对45个国内外代表性大模型进行了六大任务(数学推理、科学推理、代码生成、智能体Agent、精确指令遵循、幻觉控制)的综合测评。结果显示,海外模型如o3、o4-mini(high)在推理任务上表现突出,而国内模型如Doubao-Seed-1.6-thinking-250715在智能体Agent和幻觉控制任务上表现出色。此外,报告还分析了模型性价比、效能区间分布,并对代表性模型如Doubao-Seed-1.6-thinking-250715、DeepSeek-R1-0528、GLM-4.5等进行了详细介绍。整体来看,国内大模型在特定任务上已接近国际顶尖水平,但在综合推理能力上仍有提升空间。 适用人群:对大模型技术感兴趣的科研人员、工程师、产品经理及投资者。 使用场景及目标:①了解2025年上半年中文大模型的发展现状与趋势;②评估国内外大模型在不同任务上的表现差异;③为技术选型和性能优化提供参考依据。 其他说明:报告提供了详细的测评方法、评分标准及结果分析,确保评估的科学性和公正性。此外,SuperCLUE团队还发布了多个专项测评基准,涵盖多模态、文本、推理等多个领域,为业界提供全面的测评服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值