CSUOJ 2302 贪心+思维

114 篇文章 0 订阅

http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2302

Description

战乱年代,平行宇宙各个世界混战,你是Pokemon世界中的战略参谋,你手下有n (保证为3的倍数)个宝可梦,第i个宝可梦的物理攻击数值为Ai,特殊攻击数值为Bi,你需要将这些宝可梦等分为三个军团,第一个军团需要去参加针对物理界面的对抗战争,战斗力估值W1为宝可梦的物理攻击数值之和;第二个军团需要去参加针对魔法界面的对抗战争,战斗力估值W2为宝可梦的特殊攻击数值之和;第三个军团需要去参加物理魔法兼备的综合界面的对抗战争,战斗力估值W3为所有土兵的物理攻击数值、特殊攻击数值之和除以2。你希望W1+W2+W3最大,这样才最有可能胜利。

Input

多组数据

第一行一个整数n,保证为3的倍数。( 3≤n≤100000 )

第二行n个整数,第i个数表示Ai。

第三行n个整数,第i个数表示Bi。( 1≤ Ai, Bi ≤1000 )

Output

一行一个数字,表示最大数值和,如果为小数请输出一位小数,若为整数,不要输出小数部分。

Sample Input

6
1 7 3 4 5 9
2 3 9 4 3 3

Sample Output

35

Hint

第一个军团:宝可梦2 ,宝可梦6 ,战斗力估值W1=7+9=16

第二个军团:宝可梦1 ,宝可梦3 ,战斗力估值W2=2+9=11

第三个军团:宝可梦4 ,宝可梦5 ,战斗力估值W3=[(4+4)+(5+3)]/2=8

16+11+8=35

Source

2019百度笔试

Author

Wells

思路:没注意到多组数据WA了……我们可以将这个问题转化一下,每一类贡献乘2,那么贡献分别为A+A,A+B,B+B,那么从第一类到最后一类每一类的差距都是定值B-A,因此我们可以求出n个物品2*A的和,然后按B-A排序,只需要令选出的+B-A和最大即可,令m=n/3,那么[m+1,2*m]取一次,[2m+1,3m]取两次即可。

#include<iostream>
#include<cstdio>
#include<stack>
#include<cmath>
#include<cstring>
#include<queue>
#include<set>
#include<algorithm>
#include<iterator>
#define INF 0x3f3f3f3f
typedef long long ll;
typedef unsigned long long ull;
using namespace std;

struct node
{
    int x,y;
};

node a[100005];
ll sum=0;
int n;

bool cmp(node aa,node bb)
{
    return aa.y-aa.x<bb.y-bb.x;
}

int main()
{
    while(~scanf("%d",&n))
    {
        sum=0;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i].x);
            sum+=a[i].x*2;
        }
        for(int i=0;i<n;i++)
            scanf("%d",&a[i].y);
        sort(a,a+n,cmp);
        int len=n/3;
        for(int i=len;i<2*len;i++)
            sum+=a[i].y-a[i].x;
        for(int i=2*len;i<n;i++)
            sum+=2*(a[i].y-a[i].x);
        if(sum&1)
            printf("%.1f\n",sum*1.0/2);
        else
            printf("%lld\n",sum/2);
    }
    return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
贪心算法和动态规划都是常用于解决问题的算法思想。贪心算法是一种在每一步都做出局部最优决策的算法,而不考虑全局的状态。贪心算法通常具有较低的时间复杂度,因为它不需要回溯所有子问题的解。相比之下,动态规划需要回溯所有子问题的解,因此时间复杂度较高。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [ES6的JavaScript算法思想实现之分而治之,动态规划,贪心算法和回溯算法 贪心算法和动态规划.pdf](https://download.csdn.net/download/qq_40464803/85095551)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [动态规划与贪心算法的区别](https://blog.csdn.net/m0_57236802/article/details/129539553)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [js贪心算法](https://blog.csdn.net/qq_48315043/article/details/121678537)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值