当前位置: 首页 > news >正文

广州网站建设V芯ee8888e张家港seo建站

广州网站建设V芯ee8888e,张家港seo建站,生态农业网站模板,常用于网站推广的营销手段是题干#xff1a; 问题描述 给n个有序整数对ai bi#xff0c;你需要选择一些整数对 使得所有你选定的数的aibi的和最大。并且要求你选定的数对的ai之和非负#xff0c;bi之和非负。 输入格式 输入的第一行为n#xff0c;数对的个数   以下n行每行两个整数 ai bi 输出格…题干 问题描述 给n个有序整数对ai bi你需要选择一些整数对 使得所有你选定的数的aibi的和最大。并且要求你选定的数对的ai之和非负bi之和非负。 输入格式 输入的第一行为n数对的个数   以下n行每行两个整数 ai bi 输出格式 输出你选定的数对的aibi之和 样例输入 5 -403 -625 -847 901 -624 -708 -293 413 886 709 样例输出 1715 数据规模和约定 1n100   -1000ai,bi1000 时间限制1.0s   内存限制256.0MB 解题报告 不直接计算选定的数的aibi的和而是转化为计算在ai的和一定的情况下尽量使选定的bi的和最大。于是变成为一个01背包问题ai的值作为物体的重量bi的值作为该物体的价值。首先过滤掉所有ai和bi均小于0的数对令dp[i][j]表示前i个数对选定的ai的和为j的情况下bi的和的最大值将dp[i][j]初始化为-INF再将所有已知合法情况初始化dp[i][a[i]] b[i]之后dp[i][j] max(dp[i - 1][j], dp[i][j])若j - a[i]存在dp[i][j] max(dp[i][j], dp[i - 1][j - a[i]] b[i])。最后再统一加偏移量ZERO。值得注意的是这个背包问题虽然也可以优化成一维但是没必要如果优化成一维对于这题代码不会更简练反而会复杂不少因为这题初始化的时候不能只对二维数组的第一行进行初始化需要每一行都有一个值进行初始化所以最好的办法就是直接开二维数组做最朴素的01背包而且这题空间给的足够大所以不需要担心MLE的问题。 AC代码空间大概78MB #includecstdio #includeiostream #includealgorithm #includequeue #includemap #includevector #includeset #includestring #includecmath #includecstring #define ll long long #define pb push_back #define pm make_pair using namespace std; int tot; int a[101],b[101]; int dp[101][200000 5];//截止到第i个a[i]和为j的情况下b[i] 的最大值 int zero 100000; const int INF 0x3f3f3f3f; int main() {int n;cinn;for(int x,y,i 1; in; i) {scanf(%d%d,x,y);if(x 0 y 0) continue;a[tot] x, b[tot] y;} for(int i 0; itot; i) {for(int j -100000; j100000; j) {dp[i][j zero] -INF;}}for(int i 1; itot; i) {dp[i][a[i] zero] b[i];}for(int i 2; itot; i) {for(int j -100000; j100000; j) {if(dp[i-1][j zero] ! -INF) dp[i][j zero] max(dp[i][jzero],dp[i-1][j zero]);if(j - a[i] zero 0 j - a[i] zero 200000) //这句必须加。 dp[i][j zero] max(dp[i][j zero] , dp[i-1][j-a[i] zero] b[i]);}}int ans 0;for(int j 100000; j0; j--) {if(dp[tot][j zero] 0) ans max(ans, dp[tot][j zero] j);}printf(%d\n,ans);return 0 ;} 或者这样也可以过空间162.9MB #includecstdio #includeiostream #includealgorithm #includequeue #includemap #includevector #includeset #includestring #includecmath #includecstring #define ll long long #define pb push_back #define pm make_pair using namespace std; const int MAX 2e5 5; int tot; int a[MAX],b[MAX]; int dp[105][400000 5];//截止到第i个a[i]和为j的情况下b[i] 的最大值 int zero 100000; const int INF 0x3f3f3f3f; int main() {int n;cinn;for(int x,y,i 1; in; i) {scanf(%d%d,x,y);if(x 0 y 0) continue;a[tot] x, b[tot] y;} for(int i 0; itot; i) {for(int j -100000; j300000; j) {//这里变了dp[i][j zero] -INF;}}for(int i 1; itot; i) {dp[i][a[i] zero] b[i];}for(int i 2; itot; i) {for(int j -100000; j100000; j) {if(dp[i-1][j zero] ! -INF) dp[i][j zero] max(dp[i][jzero],dp[i-1][j zero]);if(j - a[i] zero 0 )//这里变了dp[i][j zero] max(dp[i][j zero] , dp[i-1][j-a[i] zero] b[i]);}}int ans 0;for(int j 100000; j0; j--) {if(dp[tot][j zero] 0) ans max(ans, dp[tot][j zero] j);}printf(%d\n,ans);return 0 ;} 或者这样 #includecstdio #includeiostream #includealgorithm #includequeue #includemap #includevector #includeset #includestring #includecmath #includecstring #define ll long long #define pb push_back #define pm make_pair using namespace std; const int MAX 2e5 5; int tot; int a[MAX],b[MAX]; int dp[105][400000 5];//截止到第i个a[i]和为j的情况下b[i] 的最大值 int zero 100000; const int INF 0x3f3f3f3f; int main() {int n;cinn;for(int x,y,i 1; in; i) {scanf(%d%d,x,y);if(x 0 y 0) continue;a[tot] x, b[tot] y;} for(int i 0; itot; i) {for(int j -100000; j300000; j) {dp[i][j zero] -INF;}}dp[0][zero] 0; // for(int i 1; itot; i) { // dp[i][a[i] zero] b[i]; // }for(int i 1; itot; i) {for(int j -100000; j100000; j) {if(dp[i-1][j zero] ! -INF) dp[i][j zero] max(dp[i][jzero],dp[i-1][j zero]);if(j - a[i] zero 0 )dp[i][j zero] max(dp[i][j zero] , dp[i-1][j-a[i] zero] b[i]);}}int ans 0;for(int j 100000; j0; j--) {if(dp[tot][j zero] 0) ans max(ans, dp[tot][j zero] j);}printf(%d\n,ans);return 0 ;} 当然如果你连if(j - a[i] zero 0 )也不想写那就可以直接ZERO设为200000就行了。 总结 首先需要知道他和0-1背包还是有区别的因为0-1背包是可以不初始化成-INF的但是那样表示的是可以表示的最大价值因为价值都是正数所以0可以当成是非法状态。而这个题必须初始化成-INF因为这题所谓的“价值”可以是负数我们需要新设置一个非法状态并且把唯一一个合法状态设置好dp[0][zero]0;来方便后面的转移。其实这样说来就可以改成一维的0-1背包了。 错误代码 #includecstdio #includeiostream #includealgorithm #includequeue #includemap #includevector #includeset #includestring #includecmath #includecstring #define ll long long #define pb push_back #define pm make_pair using namespace std; const int MAX 2e5 5; int tot; int a[MAX],b[MAX]; int dp[400000 5];//截止到第i个a[i]和为j的情况下b[i] 的最大值 int zero 100000; const int INF 0x3f3f3f3f; int main() {int n;cinn;for(int x,y,i 1; in; i) {scanf(%d%d,x,y);if(x 0 y 0) continue;a[tot] x, b[tot] y;} for(int j -100000; j300000; j) {dp[j zero] -INF;}dp[zero] 0;for(int i 1; itot; i) {for(int j 100000; j-100000; j--) {if(j - a[i] zero 0) dp[j zero] max(dp[j zero] , dp[j-a[i] zero] b[i]);}}int ans 0;for(int j 100000; j0; j--) {if(dp[j zero] 0) ans max(ans, dp[j zero] j);}printf(%d\n,ans);return 0 ;} 但是仔细一想这样是错误的因为就地滚动的前提是后面的数只能用到前面的数而你这个题a[i]有正有负所以可能用到前面的状态也可能用到后面的状态所以不能优化成一维。
http://www.zqtcl.cn/news/431036/

相关文章:

  • 携程网站建设的基本特点哈尔滨做平台网站平台公司
  • 网站建设入门解读国模 wordpress
  • 网站购物车js代码怎么做制作app的软件有哪些
  • 36氪网站用什么程序做的互联网门户网站建设
  • 视频聚合网站怎么做不侵权wordpress 管理员插件
  • 传媒网站后台免费模板网站建设的进度计划
  • 如何做网站排名合肥全网优化
  • 网站建设招聘信息官网 wordpress
  • 城阳网站开发公司网页制作与设计在哪搜题
  • 做网站算运营吗grace wordpress
  • 厦门建设网站建站制作网页动画的软件
  • 百度提交网站收录入口郑州网站app开发
  • 自己的身份已经网站备案了品牌建设目标包括哪些方面
  • 中国免费网站服务器下载保定网站制作系统
  • 深圳app网站设计数据库网站建设公司
  • 手机网站程序下载做地方黄页网站
  • 网站开发时如何设计英文版本专业vi机构
  • 黄骅市人事考试网电商网站怎样优化
  • 可信网站认证必须做吧陕西做网站的
  • 网站怎么静态化wordpress视频安装教程
  • 合浦县建设局网站网站备案号如何查询
  • 网站跳转代码 html亚马逊使用wordpress做的
  • 做哪一类的网站可以短时间变现东莞大朗网站设计
  • 框架网站模板建设淘宝客网站.lc和ev
  • 驻马店做网站推广涞源县住房和城乡建设局网站
  • 国外seo大神如何做网站 seo
  • 网站建设外文版要求昆山网站建设怎么样
  • 合肥知名网站制作网站建设宣传的目的
  • 曲阜做网站哪家好asp.net网站打不开html页面
  • 品牌网站开发普通人做电商赚钱吗