经典背包问题,处理好限制条件的优先级

排序是为了让相同val,相同问题数量以及选择的时候,从ti更小的问题坐起,总的penalty会最少

#include <iostream>
#include <stdio.h>
#include <cstring>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <map>
#include <algorithm>
#include <string>
using namespace std;
struct Point
{int t,v;
}p[55];
bool cmp(Point left,Point right)
{return left.t<right.t;
}
int dp[1005],pen[1005],pro[1005];
int main ()
{int test;scanf("%d",&test);while(test--){int len,n;scanf("%d%d",&len,&n);memset(dp,0,sizeof(dp));memset(pro,0,sizeof(pro));memset(pen,0,sizeof(pen));for(int i=1;i<=n;++i)scanf("%d",&p[i].t);for(int i=1;i<=n;++i)scanf("%d",&p[i].v);int ans_val=0,ans_p=0,penalty=0;sort(p+1,p+1+n,cmp);for(int i=1;i<=n;++i){for(int j=len;j>=p[i].t;--j){bool flag=false;if(dp[j-p[i].t]+p[i].v>dp[j])flag=true;else if(dp[j-p[i].t]+p[i].v==dp[j] && pro[j-p[i].t]+1>pro[j])flag=true;else if(dp[j-p[i].t]+p[i].v==dp[j] && pro[j-p[i].t]+1==pro[j] && pen[j-p[i].t]+j<pen[j])flag=true;if(flag) // update{dp[j]=dp[j-p[i].t]+p[i].v;pro[j]=pro[j-p[i].t]+1;pen[j]=pen[j-p[i].t]+j;}}}for(int j=0;j<=len;++j){bool flag=false;if(ans_val<dp[j])flag=true;else if(ans_val==dp[j] && ans_p<pro[j])flag=true;else if(ans_val==dp[j] && ans_p<pro[j] && penalty>pen[j])flag=true;if(flag){ans_val=dp[j];ans_p=pro[j];penalty=pen[j];}}printf("%d %d %d\n",ans_val,ans_p,penalty);}return 0;
}

3700

直接模拟,对set不熟悉,调试到半死,过程中出现"map/set iterator not incrementable"以为是set语法错了,查了好久set的资料,都发现没问题

其实是string读取除了问题,把空字符串放进set里面,dereference时出错了,

然后排序的问题也搞错了

学习了:

set自定义排序方式,原来要自定义个struct,重载运算符,写法好神奇

string各种错

#include <iostream>
#include <stdio.h>
#include <cstring>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <map>
#include <set>
#include<iterator>
#include <algorithm>
#include <string>
using namespace std;
struct Cmp
{bool operator()(const string& a,const string &b) const{if(a.length()==b.length()){return a<b;}return a.length()<b.length();}
};
int n;
map<string,int>mt;
map<string,int>::iterator iter;
set<string,Cmp>::iterator siter,nxt;
set<string,Cmp>s[5005];
char ss[1000];
char temp[105];int main ()
{/*s[1].insert("fdsfd");s[1].insert("fdd");for(siter=s[1].begin();siter!=s[1].end();++siter)cout<<*siter<<endl;system("pause");*/int test;scanf("%d",&test);while(test--){mt.clear();scanf("%d",&n);gets(ss);string tt;int ma=-1;for(int i=1;i<=n;++i){gets(ss);int len=strlen(ss);for(int j=0;j<len;++j)if(ss[j]>='A'&&ss[j]<='Z')ss[j]+=32;else if(!(ss[j]>='a'&&ss[j]<='z'))ss[j]='\0';for(int j=0;j<len;){while(ss[j]=='\0' && j<len)j++;if(j>=len)break;sscanf(ss+j,"%s",temp);tt=temp;if(tt=="")j++;else {mt[tt]++;ma=max(ma,mt[tt]);j+=tt.length();}}}for(int i=1;i<=ma;++i)s[i].clear();for(iter=mt.begin();iter!=mt.end();++iter){s[iter->second].insert(iter->first);}bool pre=false;for(int i=ma;i>=2;--i){if(s[i].size()==0)continue;if(s[i].size()==1){if(pre)printf(" ");cout<<s[i].begin()->c_str();pre=true;}else {nxt=siter=s[i].end();nxt--;siter--;siter--;if(pre)printf(" ");if((*siter).length()<(*nxt).length())cout<<*nxt;else cout<<*siter;pre=true;}}puts("");}return 0;
}

ZOJ 3699

#include <iostream>
#include <stdio.h>
#include <cstring>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <map>
#include <set>
#include<iterator>
#include <algorithm>
#include <string>
using namespace std;
#define N 100500
#define ll long long
struct Node
{ll vol,p;
}q[N];
ll pr[N],gas[N],cap;
int n;int main ()
{int test;scanf("%d",&test);while(test--){scanf("%d%lld",&n,&cap);bool flag=true;ll x,y;for(int i=1;i<=n;++i){scanf("%lld%lld%lld",&x,&y,&pr[i]);gas[i]=x*y;if(gas[i]>cap)flag=false;}if(!flag){printf("Impossible\n");continue;}int top=0,front=1;ll now=0,ans=0;for(int i=1;i<=n;++i){while(pr[i]<q[top].p){now-=q[top].vol;q[top].p=q[top].vol=0;top--;}++top;q[top].p=pr[i];q[top].vol=cap-now;now=cap;ll need=gas[i];now-=need;while(need>0){if(need>=q[front].vol){need-=q[front].vol;ans+=q[front].p*q[front].vol;q[front].p=q[front].vol=0;front++;}else{ans+=q[front].p*need;q[front].vol-=need;need=0;}}}printf("%lld\n",ans);}return 0;
}

ZOJ 3703,3700,3699相关推荐

  1. 【ZOJ - 3946】Highway Project(最短路子图,维护双权值,贪心,最小树形图)

    题干: Edward, the emperor of the Marjar Empire, wants to build some bidirectional highways so that he ...

  2. 【ZOJ - 4019】Schrödinger's Knapsack (dp,背包,贪心,组内贪心组间dp)

    题干: 有两种物品,k分别为k1,k2,有大小各不一的这两种物品若干,放入容量为c的背包中,能获得求最大的值.放的顺序会影响结果.每次放入一物品,其获得的值都可以用v=kr计算,r表示放入后背包剩下的 ...

  3. ZOJ 3703 Happy Programming Contest 0-1背包 DP

    ZOJ 3703 Happy Programming Contest 题目描述: 题目链接:ZOJ 3703 Happy Programming Contest 题目大意: 这是一道虐狗的题目.讲的是 ...

  4. ElasticSearch聚合语法学习(bucket,metric,hitogram,date hitogram)

    ElasticSearch聚合语法学习 目录 bucket与metric两个核心概念 插入数据 统计哪种颜色电视销量最高 统计每种颜色电视平均价格 bucket嵌套实现颜色+品牌的多层下钻 统计每种颜 ...

  5. python数据库连接类写其他类调用报超时_python面向对象,类,以及连接数据库

    ## 面向对象 ### 1.面向对象三大特性: 封装,继承,多态 ### 1.1.封装 1.在类中对数据的赋值.内部调用对外部用户是透明的 2.这使类变成了一个胶囊或容器,里面包含着类的数据和方法 3 ...

  6. mongo14-----group,aggregate,mapReduce

    group,aggregate,mapReduce分组统计: group() 简单聚合: aggregate() 强大统计: mapReduce()db.collection.group(docume ...

  7. Synology群晖 DS920 +,DS420 +,DS720 +,DS220 + NAS横向对比 群晖20plus系列怎么选

    Synology DS920 +,DS420 +,ds720 +,ds220 + NAS –应该购买哪个 群晖最新的4个plus系列 NAS上市了,它就引起了许多新买家的注意,他们想知道"我 ...

  8. pythonDay06核心编程part2(类装饰器,元类,垃圾回收,内建属性(属性拦截器),内建函数(fliter,map,reduce,sorted),集合,functools,模块进阶)

    我若将死,给孩子留遗言,只留一句话:Repetition is the mother of all learning重复是学习之母.他们将来长大,学知识,技巧.爱情.事业.交流....倘若懂得行动的力 ...

  9. 图数据集Planetoid御三家:Cora,CiteSeer,PubMed详解

    诸神缄默不语-个人CSDN博文目录 文章目录 1. 数据集基本情况介绍 1.1 Cora数据集 1.2 SiteSeer数据集 1.3 PubMed 2. PyG数据集的Planetoid调用接口 3 ...

最新文章

  1. 查询当天数据_【财会人职场必备】发票勾选、查询、认证等25问!简直太全了!都收藏了!...
  2. 库卡机器人C4计算机无法启动,KUKA-C4标准版机器人启动时序
  3. linux运行级别与服务
  4. code block怎样实现图形界面_Python 代码实现验证码识别,很稳
  5. 性能测试之:loadrunner 报lr_load_dll 失败 CCI trace: vuser_init.c(6): ci_load_dll查证及解决过程...
  6. 【Python】- scrapy 爬取图片保存到本地、且返回保存路径
  7. centos 安装指定版本的node
  8. c语言学生成绩管理系统总结
  9. NCBI安装影响因子插件
  10. knx智能照明控制系统电路图_KNX智能控制系统(20100928)解析
  11. 携程的旅游知识图谱构建和应用
  12. 阿里图标库彩色图标使用
  13. 谷歌、甲骨文史诗级版权诉讼案,10 年 API 之争本周开审
  14. Darknet框架的权重文件.weights类型转换为keras框架的权重文件类型.h5
  15. BP神经网络求解异或算法
  16. 计算机程序员的英文简历,电脑程序员英文简历范文
  17. React面试题(2)
  18. java当数值超过byte时_【Java学习重难点记录】byte数据类型在显式类型转换时超出其取值范围的转换过程...
  19. 怎么把照片做成动态的?如何让照片动起来?
  20. 不止是刷题——leetcode笑死人的评论合集,独乐乐不如众乐乐~~

热门文章

  1. unity 画球面_unity中实现Mesh画球体、半球体、四分之一球体以及任意弧面
  2. Intellij或者pycharm的缓存目录很大,如何从C盘移动出去?
  3. STM32驱动2位数码管
  4. Tensorflow神经网络预测股票均价
  5. python之list与tuple
  6. hacker黑客简介
  7. 实习证明| 大数据在线实习项目意义
  8. ios sinaweibo 客户端(一)
  9. PDF中的表格导入到Excel(分割)
  10. 键盘录入五个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台