日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java算法提高求最大值_藍橋杯 算法提高 求最大值

發布時間:2025/3/15 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java算法提高求最大值_藍橋杯 算法提高 求最大值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

算法提高 求最大值

時間限制:1.0s ? 內存限制:256.0MB

問題描述給n個有序整數對ai bi,你需要選擇一些整數對 使得所有你選定的數的ai+bi的和最大。並且要求你選定的數對的ai之和非負,bi之和非負。輸入格式輸入的第一行為n,數對的個數  以下n行每行兩個整數 ai bi輸出格式輸出你選定的數對的ai+bi之和樣例輸入5-403 -625-847 901-624 -708-293 413886 709樣例輸出1715數據規模和約定1<=n<=100  -1000<=ai,bi<=1000

這道題呢 ?神奇的背包變種- -。 首先呢 ?背包是沒有負數的- -這時候就需要把負數變成正數 然后背包一下 ?動態規劃出所有可能的結果

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

int d[400005];

int a[400005],b[400005];

int ss=100000;

int main()

{

int n;

while(cin>>n)

{

memset(d,-1,sizeof(d));

int x,y;

int s;

d[200000]=1; //以20w的中間值作為數軸的0點

for(int i=0;i

{

cin>>x>>y;

if(x+y>0) //當輸出的兩個數的和為整數的時候,倒著放 和01背包相同

{

for(int j=400000;j>=0;j--)

{

if(j-x-y>=0&&j-x-y<=400000)

{

if(d[j]==1&&d[j-x-y]==1)

{

a[j]=max(a[j],a[j-x-y]+x);

b[j]=max(b[j],b[j-x-y]+y);

}

else if(d[j]

{

a[j]=a[j-x-y]+x;

b[j]=b[j-x-y]+y;

}

d[j]=max(d[j],d[j-x-y]);

if(d[j]==1)

{

// cout<

}

}

}

}

else //然后呢 小於0的時候 正著放 和01背包相同

{

for(int j=0;j<=400000;j++)

{

if(j-x-y>=0&&j-x-y<=400000)

{

if(d[j]==1&&d[j-x-y]==1)

{

a[j]=max(a[j],a[j-x-y]+x);

b[j]=max(b[j],b[j-x-y]+y);

}

else if(d[j]

{

a[j]=a[j-x-y]+x;

b[j]=b[j-x-y]+y;

}

d[j]=max(d[j],d[j-x-y]);

if(d[j]==1)

{

//cout<

}

}

}

}

}

int i;

for(i=400000;i>200000;i--)

{

if(d[i]==1&&a[i]>=0&&b[i]>=0) //這時候就是找,最大的值

{

cout<

break;

}

}

if(i<=200000)

{

cout<

}

}

}

總結

以上是生活随笔為你收集整理的java算法提高求最大值_藍橋杯 算法提高 求最大值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。