算法提高 求最大值

举报
陈言必行 发表于 2021/08/13 23:04:38 2021/08/13
【摘要】   问题描述 给n个有序整数对aibi,你需要选择一些整数对 使得所有你选定的数的ai+bi的和最大。并且要求你选定的数对的ai之和非负,bi之和非负。 输入格式 输入的第一行为n,数对的个数   以下n行每行两个整数 ai bi 输出格式 输出你选定的数对的ai+bi之和 样例输入...
 
问题描述
给n个有序整数对aibi,你需要选择一些整数对 使得所有你选定的数的ai+bi的和最大。并且要求你选定的数对的ai之和非负,bi之和非负。
输入格式
输入的第一行为n,数对的个数
  以下n行每行两个整数 ai bi
输出格式
输出你选定的数对的ai+bi之和
样例输入
5
-403 -625
-847 901
-624 -708
-293 413
886 709
样例输出
1715
数据规模和约定
1<=n<=100
  -1000<=ai,bi<=1000

      
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <iomanip>
  4. #include <cmath>
  5. #include <cstring>
  6. #include <string>
  7. #include<iostream>
  8. #include<algorithm>
  9. #include<cstring>
  10. #include <cstdio>
  11. using namespace std;
  12. int d[400005];
  13. int a[400005],b[400005];
  14. int ss=100000;
  15. int main()
  16. {
  17. int n;
  18. while(cin>>n)
  19. {
  20. memset(d,-1,sizeof(d));
  21. int x,y;
  22. int s;
  23. d[200000]=1;
  24. for(inti=0;i
  25. {
  26. cin>>x>>y;
  27. if(x+y>0)
  28. for(int j=400000;j>=0;j--)
  29. {
  30. if(j-x-y>=0&&j-x-y<=400000)
  31. {
  32. if(d[j]==1&&d[j-x-y]==1)
  33. {
  34. a[j]=max(a[j],a[j-x-y]+x);
  35. b[j]=max(b[j],b[j-x-y]+y);
  36. }
  37. else if(d[j]
  38. {
  39. a[j]=a[j-x-y]+x;
  40. b[j]=b[j-x-y]+y;
  41. }
  42. d[j]=max(d[j],d[j-x-y]);
  43. if(d[j]==1)
  44. {
  45. // cout<<j<<' '<<x<<''<<y<<' '<<j-x-y<<' '<<a[j]<<''<<b[j]<<endl;
  46. }
  47. }
  48. }
  49. }
  50. else
  51. {
  52. for(int j=0;j<=400000;j++)
  53. {
  54. if(j-x-y>=0&&j-x-y<=400000)
  55. {
  56. if(d[j]==1&&d[j-x-y]==1)
  57. {
  58. a[j]=max(a[j],a[j-x-y]+x);
  59. b[j]=max(b[j],b[j-x-y]+y);
  60. }
  61. else if(d[j]
  62. {
  63. a[j]=a[j-x-y]+x;
  64. b[j]=b[j-x-y]+y;
  65. }
  66. d[j]=max(d[j],d[j-x-y]);
  67. if(d[j]==1)
  68. {
  69. //cout<<j<<' '<<x<<''<<y<<' '<<j-x-y<<' '<<a[j]<<''<<b[j]<<endl;
  70. }
  71. }
  72. }
  73. }
  74. }
  75. int i;
  76. for(i=400000;i>200000;i--)
  77. {
  78. if(d[i]==1&&a[i]>=0&&b[i]>=0)
  79. {
  80. cout<<i-200000<<endl;
  81. break;
  82. }
  83. }
  84. if(i<=200000)
  85. {
  86. cout<<"0"<<endl;
  87. }
  88. }
  89. }




此题使用c++实现的,小编写的java只得到了42分,,不好意思拿出来,希望会做的大神们评论或者私信我哦,小编先拜谢了

文章来源: czhenya.blog.csdn.net,作者:陈言必行,版权归原作者所有,如需转载,请联系作者。

原文链接:czhenya.blog.csdn.net/article/details/76092200

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。