首页 > 其他分享 >题解:UVA1456 Cellular Network

题解:UVA1456 Cellular Network

时间:2024-09-26 18:02:27浏览次数:18  
标签:Network int 题解 MAXN Cellular UVA1456

UVA1456 Cellular Network 题解

夭寿了!30 行写完紫题了!

更新:已联系管理员修改难度,现在是绿题

题意很简单,不再赘述。

首先一个小贪心,将概率 \(u​\) 进行从大到小的排序,优先查看概率大的区域,显然这样能够保证访问数量期望最小。

接着考虑如何将区域分组。一个显而易见的思路是动态规划。

记 \(f_{i,j}\) 表示前 \(i\) 个区域被分成 \(j\) 组,并全部访问完后期望的最小值。

则有如下转移:

\[f_{i,j} = \min\limits_{0 \le k < i}\{f_{k, j - 1} + \sum\limits_{x =k + 1}\limits^{i}u_x\} \]

求个前缀和可以在 \(O(n)\) 内完成转移。总时间复杂度为 \(O(n^2w)\),完全足够通过本题。

代码如下:

#include<bits/stdc++.h>
#define MAXN 110
using namespace std;
typedef long long ll;
int t, n, w;
ll u[MAXN], sum[MAXN], dp[MAXN][MAXN];
int main(){
    scanf("%d",&t);
    while(t--){
        scanf("%d%d",&n,&w);
        for(int i = 1; i <= n; i++) scanf("%d",&u[i]);
        sort(u + 1, u + n + 1, greater<int>());
        for(int i = 1; i <= n; i++) sum[i] = sum[i - 1] + u[i];
        memset(dp, 0x3f, sizeof(dp));
        dp[0][0] = 0;
        for(int i = 1; i <= n; i++){
            for(int j = 0; j <= i; j++){
                for(int k = 1; k <= w; k++){
                    dp[i][k] = min(dp[i][k], dp[j][k - 1] + i * (sum[i] - sum[j]));
                }
            }
        }
        printf("%.4f\n",dp[n][w] * 1.0 / sum[n]);
    } 
}

标签:Network,int,题解,MAXN,Cellular,UVA1456
From: https://www.cnblogs.com/NightTide/p/18434005

相关文章

  • 《超级机器人大战30》缺少roboex32.dll启动遇阻怎么办?轻松应对《超级机器人大战30》ro
    当《超级机器人大战30》因缺少roboex32.dll文件而启动遇阻时,可以尝试以下几种解决方案来轻松应对这一问题:一、下载并替换缺失的DLL文件寻找可靠来源:首先,需要在互联网上找到可靠的roboex32.dll文件下载源。建议访问官方网站、微软官方下载中心或知名的软件下载站点,以确保下载......
  • 1. 两数之和题解
    题目描述[!NOTE]总结:找出整数数组中两数之后等于目标值的两个数,然后返回其下标给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素......
  • 题解:P10198 Infinite Adventure P
    \(\text{Link}\)题意给定\(n\)个数组\(c_{i,0\dotst_i-1}\),其中\(t_i\)为\(2\)的幂。有\(q\)次询问,每次询问给出三个参数\(x,T,\Delta\),接下来会执行\(\Delta\)次\(x\getsc_{x,T\bmodt_x},T\getsT+1\),求出最终的\(x\)。\(n,\sumt\le10^5\),\(q\le5\time......
  • 题解:P10998 Tuple+
    \(\text{Link}\)有意思,记录一下。题意给出\(m\)个互不相同的无序三元组\((u,v,w)\),求有多少无序四元组\((a,b,c,d)\)使得三元组\((a,b,c),(a,b,d),(a,c,d),(b,c,d)\)均存在。\(m\le3\times10^5\)。Bonus:\(m\le2\times10^6\)。题解回忆无向图三元环计数的做法,使......