Codevs 1025 选菜
来源:互联网 发布:路由器解密码软件 编辑:程序博客网 时间:2024/06/02 05:52
题目:
http://codevs.cn/problem/1025/
题解:
预处理略复杂的裸01;
价格—>*10;
出现多次,选择一次—>unique 重载结构体==
必须选择—>先for一遍。记录还剩的钱和已经得到的美味度。
本题,浮点数误差迷得很QwQ
代码:
#include<iostream>#include<cstdio>#include<algorithm>using namespace std;const int N=100+50,M=1000+50;int n,k,x,a,ans;float X;int dp[M];bool mst[N];struct node{ int num,w,v;}c[N];bool cmp(node a,node b){ return a.num>b.num;}bool operator == (node a,node b){ return a.num==b.num;}int main(){ scanf("%d%d%f",&n,&k,&X); x=X*10; for(int i=1;i<=n;i++) scanf("%f",&X),c[i].w=X*10; for(int i=1;i<=n;i++) scanf("%d",&c[i].v); for(int i=1;i<=n;i++) scanf("%d",&c[i].num); for(int i=1;i<=k;i++) scanf("%d",&a),mst[a]=1; sort(c+1,c+n+1,cmp); n=unique(c+1,c+n+1)-c-1; for(int i=1;i<=n;i++) if(mst[c[i].num]) ans+=c[i].v,x-=c[i].w; for(int i=1;i<=n;i++){ if(mst[c[i].num]) continue; for(int j=x;j>=c[i].w;j--) dp[j]=max(dp[j],dp[j-c[i].w]+c[i].v); } printf("%d",dp[x]+ans); return 0;}
阅读全文
0 0
- 【codevs 1025】选菜
- 1025 选菜(codevs)
- Codevs 1025 选菜
- CODEVS 1025 选菜
- Codevs 1025 选菜
- codevs 1025 选菜 背包问题 解题报告
- Codevs p1025 选菜
- codevs天梯 选菜
- codevs动态规划 选菜
- Codevs
- 20160317 CodeVS 1025 选菜,1102 采药,3324 新斯诺克
- codevs 1060
- [CodeVS]3304
- codevs 4248
- Codevs 苹果树
- Codevs 挂缀
- Codevs 加密算法
- CodeVs 1011
- C++静态成员函数和静态数据成员
- Windows 获取注册表属性
- 常见的四种线程池和区别
- C#中设置多标签页面
- 热部署插件JRebel在Eclipse和Intellij IDEA中的安装与配置(非破解,官方正版永久使用)
- Codevs 1025 选菜
- 《C++ Concurrency in Action》笔记19 限时等待、FP并行编程
- tomcat点击startup.bat一闪而退的方法
- 关于Android实现TextView跑马灯效果
- Fire Net HDU
- Mysql在高并发情况下,防止库存超卖而小于0的解决方案
- 手把手教你用Python画地图
- Linux 命令
- 从零开始使用Visual Studio 2017编译器 (一)