POJ 1018 Communication System DP

这道DP真是没想出来怎么做,不过看了别人的代码后发现也只能这么想了,只有B的状态是可以确定的,然后枚举B,

还可以再优化一下,但是数据量不大,就没这个必要了……

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int N = 105;
 
vector<int> B[N], P[N]; //由于是不定长数组,所以用vector
int BMin, BMax;
 
void input( int& n ) { //输入数据,并且获取BMin, BMax的值.
    int m, b, p;
    scanf("%d", &n);
    for( int i = 0; i < n; ++i ) {
        B[i].clear(), P[i].clear();
        scanf("%d", &m);
        int temp = -1;
        while(m--) {
            scanf("%d%d", &b, &p);
            BMin = min(BMin, b);
            temp = max(temp, b);
            B[i].push_back(b), P[i].push_back(p);
        }
        BMax = min(BMax, temp);
    }
}
 
void slove( ) {
    BMin = 100000000, BMax = 100000000;
    int n; input(n); double ans = 0;
    for( int i = BMin; i <= BMax; ++i ) {
        double PSum = 0;
        for( int j = 0; j < n; ++j ) {
            int Size = B[j].size(), temp = 100000000;
            for( int k = 0; k < Size; ++k ) {
                if( B[j][k] >= i && P[j][k] < temp ) temp = P[j][k];
            }
            PSum += temp;
        }
        ans = max( ans, i / PSum );
    }
    printf("%.3lf\n", ans);
}
 
int main() {
    int t;
    scanf("%d", &t); while(t--) slove();
    return 0;
}

 

 

posted @   YaLing  阅读(230)  评论(2编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥
点击右上角即可分享
微信分享提示