救救孩子吧!!!
  • 板块灌水区
  • 楼主promusk
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/10/25 21:39
  • 上次更新2023/11/4 02:15:27
查看原帖
救救孩子吧!!!
486638
promusk楼主2021/10/25 21:39

我写了篇题解(第一篇)

管理员大大没给过,理由是:数学公式应添加 LaTeX;LaTeX 公式/英文/数字与汉字之间应加空格

有没有大佬教我怎么用LaTeX 公式啊!!!

拯救小矮人的思路

矮一定先走,不然都走不掉了,而且对梯子贡献少

高一定后走,基本都走得掉了,而且对梯子贡献大

如果总长(a+b)一样,让脚到肩膀短(对梯子贡献少)的先走

状态转移方程:dp[j]=max(dp[j],dp[j-1]-a[i])

剩下就没有什么要点了

再多嘴一句,考试实在想不出来就暴力30分 最后的最后,代码如下:

#include<bits/stdc++.h>

using namespace std;

int n,h,dp[2001];

struct node

{

    int a,b;
    
}a[2001];

bool cmp(node x,node y)//排一下,逃生能力弱的人
(a+b小的)先逃出去


{


if(x.a+x.b==y.a+y.b) return x.a<y.a;

return x.a+x.b<y.a+y.b;

}

int main()

{
 
 cin>>n;

for(int i=1;i<=n;i++) cin>>a[i].a>>a[i].b;

cin>>h;

sort(a+1,a+1+n,cmp);

for(int i=1;i<=n;i++) dp[i]=-100000000,dp[0]+=a[i].a;//一定不要忘了
(dp[i]=-100000000)哦!!!

for(int i=1;i<=n;i++) for(int j=i;j>=1;j--) 
if(dp[j-1]+a[i].b>=h) dp[j]=max(dp[j],dp[j-1]-
a[i].a);//状态转移方程

for(int i=n;i>=0;i--) if(dp[i]>=0){ 
cout<<i;return 0;}

return 0;//完结散花

}

2021/10/25 21:39
加载中...