北邮新生排位赛2解题报告a-c


时间限制 1000 ms  内存限制 65536 KB

题目描述

丁神要去Google上班了,去之前丁神想再做一道水题,但时间不多了,所以他希望题目做起来既水又快。现在一共有n道题,编号从1到n,每道题有两个值aba为做这道题需要的时间,b为题目的“水值”,丁神希望做b/a最大的那题。

输入格式

输入第一行为数据组数T(T10),接下来T组数据,每组数据中第一行为一个数nn为题目的数量,接下来n行,每行两个正整数ab。如果两道题b/a的值是一样的就输出a比较小的,如果还一样就输出编号比较靠前的。 1a,b109,1n100000)

输出格式

对于每组数据,输出对应的题目编号,每个输出占一行。

输入样例

1
2
3 5
4 8

输出样例

2
水题不解释,数据颇大,不能排序,卡在cin,5次

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include <cmath>
#include <vector>
using namespace std;
const double eps=10e-7;
int main(){
ios::sync_with_stdio(false);
    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        double maxd=0;
        int a,b;
        int mina;
        int ans;
        for(int ni=1;ni<=n;ni++){
            cin>>a>>b;
            if(maxd<b/a){
                maxd=b/a;
                mina=a;
                ans=ni;
            }
            else if(fabs(maxd-b/a)<eps){
                if(a<mina){
                    mina=a;
                    ans=ni;
                }
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}




时间限制 1000 ms  内存限制 65536 KB

题目描述

丁神又要去Google上班了,这一次丁神想多做几道水题,并使题目的总水量最大.丁神同一时刻只能在水一道题,只有做完这道题才能得到它的水值,丁神的总时间为t,现在一共有n道题,编号从1到n,每道题有两个值aba为做这道题需要的时间,b为题目的水值。

输入格式

输入第一行为数据组数T(T10),接下来T组数据,每组数据中第一行为两个数tnn为题目的数量,t为总时间,接下来n行,每行两个正整数ab(1a,t10001n1001b1000000000)

输出格式

对于每组数据,输出对应的最大总水量,每个输出占一行。

输入样例

1
10 2
8 16
6 12

输出样例

16
咳咳..其实我第一次的时候交的贪心我会说吗?看来dp还是意识缺乏,简单的01背包


#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include <cmath>
#include <vector>
using namespace std;
 
class query{
    public:
    int a,b,index;
};
bool cmp(query q1,query q2){
        long long  i=(q1.b*q2.a)-(q2.b*q1.a);
        if(i>0)return true;
        if(i<0)return false;
        if(q1.a>q2.a)return true;
        if(q1.a<q2.a)return false;
        if(q1.index<q2.index)return true;
        return false;
}
query que[120];
long long dp[120][1200];
int main(){
    int t;
    ios::sync_with_stdio(false);
    cin>>t;
    //cout<<t<<endl;
    while(t--){
        int n,time;
        cin>>time>>n;
        int a,b;
        for(int ni=0;ni<n;ni++){
            cin>>a>>b;
            que[ni].a=a;
            que[ni].b=b;
            que[ni].index=ni;
        }
       // for(int ni=0;ni<n;ni++){
         //   cout<<que[ni].a<<" "<<que[ni].b<<" "<<que[ni].index<<endl;
        //}
        sort(que,que+n,cmp);
        long long ans=0;
       // for(int ni=0;ni<n;ni++){
       //     cout<<que[ni].a<<" "<<que[ni].b<<" "<<que[ni].index<<endl;
       // }
       memset(dp,0,sizeof(dp));
       dp[0][que[0].a]=que[0].b;
       for(int i=0;i<n;i++){
           for(int j=1;j<=time;j++){
               dp[i][j]=max(dp[i][j],dp[i][j-1]);
               if(i)dp[i][j]=max(dp[i][j],dp[i-1][j]);
               if(i&&j>=que[i].a){
                   dp[i][j]=max(dp[i][j],dp[i-1][j-que[i].a]+que[i].b);
                }
            //cout<<"dp"<<i<<" "<<j<<" "<<dp[i][j]<<endl;
            }
        }
        cout<<dp[n-1][time]<<endl;
    }
    return 0;
}



c:

时间限制 1000 ms  内存限制 65536 KB

题目描述

现有一段横向长度为N的山脉,其中每段有一个独一无二的高度Hi(1到N之间的正整数)。现在你想知道对于长度为N的山脉,可能有这样的山脉多少种。这样的山脉是:某个位置要么比两边的高度都低,要么比两边的高度都高。两座山脉 A和 B 不同当且仅当存在一个 i,使得 Ai≠Bi。由于这个数目可能很大,你只对它除以 P 的余数感兴趣。

输入格式

输入以EOF为结束,每组仅含一行,两个正整数 N, P。 3≤N≤4200,P≤10^9

输出格式

对于每组数据输出仅含一行,一个非负整数,表示你所求的答案对 P 取余之后的结果。

输入样例

4 7

输出样例

3
说明:共有 10 种可能的山脉,它们是:
1324    1423    2143    2314    2413
3142    3241    3412    4132    4231 
又是dp

又没找出关系

...........

总之就是好好思考...

对k+1选取k+1作为基点,它在哪段都会成为最大点,上顶点,

设左边长度j:

左边 ans[j]

右边 ans[k-j]

ans(k+1)=SUM(c[j][k]*ans[j]*ans[k-j])

ym吴大神,刘大神

接下来注意不要爆运算中的int就行了(改成longlong)

#include <iostream>
using namespace std;
#define MAXN 4202
int c[MAXN][MAXN];
long long ans[MAXN];
int main(){
    int n,p;
    while(cin>>n>>p){
        c[1][1]=c[1][0]=1;
        for(int i=2;i<=n;i++){
            c[i][0]=1;
            for(int j=1;j<=i;j++){
                c[i][j]=(c[i-1][j-1]+c[i-1][j])%p;
            }
        }
        ans[0]=1%p;
        ans[1]=1%p;
        ans[2]=1%p;
        ans[3]=2%p;
        for(int i=4;i<=n;i++){
            for(int j=0;j<i;j+=2){
                ans[i]=ans[i]%p+((c[i-1][j])*(ans[i-1-j])%p*ans[j])%p;
                ans[i]%=p;
            }
        }
        cout<<ans[n]*2%p<<endl;
    }
}


转载于:https://www.cnblogs.com/xuesu/p/4041491.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
代码下载:完整代码,可直接运行 ;运行版本:2022a或2019b或2014a;若运行有问题,可私信博主; **仿真咨询 1 各类智能优化算法改进及应用** 生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化 **2 机器学习和深度学习方面** 卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断 **3 图像处理方面** 图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知 **4 路径规划方面** 旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化 **5 无人机应用方面** 无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配 **6 无线传感器定位及布局方面** 传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化 **7 信号处理方面** 信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化 **8 电力系统方面** 微电网优化、无功优化、配电网重构、储能配置 **9 元胞自动机方面** 交通流 人群疏散 病毒扩散 晶体生长 **10 雷达方面** 卡尔曼滤波跟踪、航迹关联、航迹融合

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值