导弹拦截

来源:互联网 发布:mysql tmp 目录在哪 编辑:程序博客网 时间:2024/05/18 00:09

QAQ
虽说是DP题,但是搜索居然又过了,当然这肯定不是正解,但在noip的考场上得了部分分也是极好的。
后来想了一下,其实挺简单的
第一个问题是很简单的,每次打了导弹,系统最大高度就会减小到当前导弹高度,而且导弹是依次打来的,很显然我们只要找一个最大不上升子序列就可以了
主要是第二问,求系统的个数(话说不是试验阶段,只有一套系统么,,,,)
我很无耻的就想到了暴力搜索(还加了个sort)
这个时间复杂度显然是很吓人的,所以肯定不是正解
思路很简单,用一个数组记录系统最大拦截高度,依次枚举导弹,我们在系统中找一个拦截高度最低但可以拦截下导弹的系统,用它拦截这颗导弹就行了,这样肯定是最优解
如果没有系统能够拦住这颗导弹,我们只能新开一个系统了QAQ
下面是搜索代码

#include <cstdio>#include <iostream>#include <algorithm>using namespace std;int h[101];int down[101];int inte[101];int sum=0x7fffffff;int t=0;void dfs(int x,int z)//x导弹编号,z系统总数{    if(x==t+1)    {        sum=min(z,sum);        return;    }    sort(inte+1,inte+z+1);    int i;    for(i=1;i<=z;i++)     if(inte[i]>=h[x]) break;    if(inte[i]>=h[x])    {       inte[i]=h[x];       dfs(x+1,z);        }    else    {        inte[z+1]=h[x];        dfs(x+1,z+1);        inte[z+1]=0;    }}int main(){    inte[1]=0x7fffffff;    int x=0;    while(scanf("%d",&x)!=EOF)     h[++t]=x;    down[1]=1;    for(int i=2;i<=t;i++)    {        int maxf=0;        for(int j=1;j<i;j++)         if(h[i]<=h[j]) maxf=max(down[j],maxf);        down[i]=++maxf;    }    int ans=0;    for(int i=1;i<=t;i++)     ans=max(ans,down[i]);    printf("%d\n",ans);    dfs(1,1);    printf("%d",sum);    return 0;} 

然后是正解,其实跟第一问思路一样,我们只需要找一下最大上升子序列就行了233
这样找出的便是最少的系统数目
附AC代码

#include <cstdio>#include <iostream>#include <algorithm>using namespace std;int h[101];int rise[101]; int down[101];int t=0;int main(){    int x;    while(scanf("%d",&x)!=EOF)     h[++t]=x;    down[1]=1;    for(int i=2;i<=t;i++)    {        int maxf=0;        for(int j=1;j<i;j++)         if(h[i]<=h[j]) maxf=max(down[j],maxf);        down[i]=++maxf;    }    int ans=0;    for(int i=1;i<=t;i++)     ans=max(ans,down[i]);    printf("%d\n",ans);    rise[1]=1;    for(int i=2;i<=t;i++)     {        int maxf=0;        for(int j=1;j<i;j++)         if(h[i]>h[j]) maxf=max(rise[j],maxf);        rise[i]=++maxf;     }    ans=0;    for(int i=1;i<=t;i++)     ans=max(ans,rise[i]);    printf("%d",ans);    return 0;} 
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 三个半月宝宝体检脚有的紧怎么办 肛门被红枣核刺了一个洞怎么办 肛门里面有棉签上的棉花怎么办 孩子裤子沾屎怎么洗下来怎么办 做完痔疮手术后有点肛门狭窄怎么办 孕妇做b超宝宝不配合怎么办 怀孕产检医生问的尴尬怎么办 带着节育环做的核磁怎么办 便秘洗肠后最一周未排便怎么办 用了开塞露后肚子疼拉不出来怎么办 冰点脱毛当天用沐浴露洗澡了怎么办 自体脂肪填充脸部但发红又痒怎么办 金矿受伤死亡不给开死亡证明怎么办 手机欠费了导致没信号了怎么办 金立手机指纹硬件无法使用怎么办 试管取卵医生说卵子碎片多怎么办 取卵腹水抽水后尿不通怎么办 手机锁屏密码忘了怎么办求解锁 苹果手表锁屏密码忘记了怎么办 苹果手表锁屏密码忘了怎么办 电脑输密码时点了用户账户怎么办 w7电脑锁屏密码忘记了怎么办 台式电脑w7锁屏密码忘记了怎么办 win7电脑锁屏密码忘记了怎么办 苹果手机4s开机密码忘记了怎么办 苹果4s下载东西忘记密码怎么办 苹果4s不记得开机密码怎么办? 苹果手机id密码忘了怎么办能解锁 苹果5s id密码忘了怎么办? 苹果手机激活锁id忘记了怎么办 苹果刷了机忘了账号无法激活怎么办 三星s7指纹解开锁密码忘了怎么办 索尼手机锁屏密码忘了怎么办 金立手机开机密码忘了怎么办 如果小米手机锁屏密码忘记了怎么办 小米手机锁屏密码忘了怎么办 小米5x忘记了屏保锁屏密码怎么办 htc手机锁屏密码忘了怎么办 苹果7手机解锁密码忘了怎么办 魅族7plus锁屏密码忘了怎么办 捡到苹果手机不知道id密码怎么办