求大神把下面代码转化为java语言

keyhwt 2021-05-01 06:21:01
#include <iostream>
#include <cstdio>
#include <cstring>
#define N 500
#define M 850

using namespace std;

struct point{int x,y;point(const int &A,const int &B){x=A;y=B;}point(){}};
typedef point Vector;
Vector operator - (const point &a,const point &b){return Vector(a.x-b.x,a.y-b.y);}
inline long long Cross(Vector A,Vector B){return 1LL*A.x*B.y-1LL*A.y*B.x;}
int n,m,x[N],y[N],v[N],top;
long long F[M],ans;
long long rk[M]; //记录本次DP第i个题目的优先级
point rc[M]; //记录到达获得i收益的点(x,y)

inline int read()
{
int x=0;char ch=getchar();
while(ch<'0'||ch>'9')ch=getchar();
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x;
}

point DP()
{
point now;
now.x = now.y = 4000000;
for (int i=1;i<=top;i++) F[i] = 1LL << 62;
F[0] = 0LL;
for (int i=1;i<=n;i++)
for (int j=top;j>=v[i];j--)
if (F[j] > F[j-v[i]] + rk[i]) {
rc[j].x = rc[ j-v[i] ].x + x[i];
rc[j].y = rc[ j-v[i] ].y + y[i];
F[j] = F[j-v[i]] + rk[i];
}

int k = m;
for (int i=m;i<=top;i++) if (F[k] > F[i]) k = i;
now = rc[k];
ans = min(ans,1LL*now.x*now.y);
return now;
}

void solve(point A,point B)
{
for (int i=1;i<=n;i++) rk[i] = 1LL * x[i] * (A.y - B.y) + y[i] * (B.x - A.x); //更新关键词
point C = DP();
if(Cross(B-A,C-A)>=0) return ; //寻找不到直线AB左下方的点
solve(A,C);solve(C,B); //分成两部分递归
}

int main()
{
ans = 1LL << 62;
while (~scanf("%d%d",&n,&m))
{
for (int i=1;i<=n;i++) {v[i] = read();x[i] = read(); y[i] = read();}
for (int i=1;i<=n;i++) top += v[i];

for (int i=1;i<=n;i++) rk[i] = 1LL*x[i]; //DP关键词为横坐标
point A = DP(); //寻找最靠近y轴的点

for (int i=1;i<=n;i++) rk[i] = 1LL*y[i]; //DP关键词为纵坐标
point B = DP(); //寻找最靠近x轴的点

solve(A,B); //递归寻找在A,B左下方的点

printf("%I64d\n",ans);
}
return 0;
}
...全文
119 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文全面介绍了Java编程语言的学习路径,从基础语法、面向对象编程到高级主题如多线程编程、数据库操作、异常处理等。文中详细描述了Java在企业级应用、移动开发、大数据处理和云计算等领域的广泛应用,并解释了其受欢迎的原因,如跨平台性、面向对象特性及丰富的类库。接着,文章逐步引导读者搭建Java开发环境,深入学习Java语法、面向对象编程的核心思想(包括类与对象、封装、继承和多态),并介绍了核心类库的使用方法。进一步探讨了Java的进阶知识点,如异常处理、多线程编程、泛型与反射,以及设计模式的应用。在Web开发方面,文章介绍了HTML、CSS、JavaScript的基础知识,以及Servlet、JSP、过滤器和监听器的作用。对于框架部分,重点讲解了Spring及其子框架SpringMVC、MyBatis的功能和使用方法,强调了Spring Boot带来的简化配置和快速开发的优势。最后,文章通过实战项目的选择与规划、开发过程的详细步骤,以及持续学习的建议,帮助读者将理论知识转化为实际技能,鼓励大家参与开源项目,持续跟进技术前沿,最终实现从“小白”到“大神”的蜕变。 适合人群:本文适合对Java编程感兴趣的初学者,尤其是希望通过系统学习掌握Java核心技术并应用于实际项目开发的人群。 使用场景及目标:①了解Java在不同领域的应用,选择Java作为编程语言;②掌握Java开发环境的搭建,熟悉基础语法和面向对象编程;③深入理解多线程、异常处理等高级特性;④学习Web开发技术,掌握Servlet、JSP等服务器端技术;⑤熟悉主流框架如Spring、SpringMVC、MyBatis,提高开发效率;⑥通过实战项目积累经验,提升解决实际问题的能力。 其他说明:本文不仅提供了详尽的技术知识点,还结合了大量实例代码和应用场景,帮助读者更好地理解和掌握Java编程。同时,强调了持续学习的重要性,鼓励读者通过阅读技术书籍、关注技术博客与论坛、参与开源项目等方式不断提升自我,最终成为一名优秀的Java开发人员。

51,396

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧