NYOJ49 开心的小明 DFS/01背包
来源:互联网 发布:c语言经典程序 编辑:程序博客网 时间:2024/06/07 09:39
- 输入
- 第一行输入一个整数N(0<N<=101)表示测试数据组数
每组测试数据输入的第1 行,为两个正整数,用一个空格隔开:
N m
(其中N(<30000)表示总钱数,m(<25)为希望购买物品的个数。)
从第2 行到第m+1 行,第j 行给出了编号为j-1
的物品的基本数据,每行有2 个非负整数
v p
(其中v 表示该物品的价格(v≤10000),p 表示该物品的重要度(1~5)) - 输出
- 每组测试数据输出只有一个正整数,为不超过总钱数的物品的价格与重要度乘积的总和的
最大值(<100000000) - 样例输入
11000 5800 2400 5300 5400 3200 2
- 样例输出
3900
这题我认为有两种做法:
一是01背包,将重要度乘以重量的值作为一般01背包问题的价值即可;
二是DFS,将所有情况遍历取最优即可,这题能够这么做是因为数据量较小。
我只写了DFS的,01背包懒得放了 (~ ̄▽ ̄)~
DFS代码:
#include <iostream>#include <cstdio>#include <map>#include <set>#include <vector>#include <queue>#include <stack>#include <cmath>#include <algorithm>#include <cstring>#include <string>using namespace std;#define INF 0x3f3f3f3ftypedef long long LL;int p[30],q[30];int n,m,ans;void dfs(int m,int w,int j){ if(j==n){ ans=max(ans,w); return; } if(m-p[j]>=0){ w+=p[j]*q[j]; dfs(m-p[j],w,j+1); w-=p[j]*q[j]; } dfs(m,w,j+1); return;}int main(){ int t; scanf("%d",&t); while(t--){ scanf("%d%d",&m,&n); for(int i=0;i<n;i++){ scanf("%d%d",&p[i],&q[i]); } ans=0; dfs(m,0,0); printf("%d\n",ans); } return 0;}
0 0
- NYOJ49 开心的小明 DFS/01背包
- nyoj49 开心的小明 01背包
- NYOJ49 开心的小明 【动态规划】+【01背包】
- nyoj49开心的小明(01背包)
- NYoj49开心的小明(01背包)
- NYOJ49开心的小明
- nyoj49 开心的小明
- nyoj49 开心的小明
- NYOJ49. 开心的小明(0-1背包)
- 开心的小明-01背包
- 01背包,开心的小明
- nyoj49(01背包)
- NYOJ 49-开心的小明:01背包
- NYOJ 题目49 开心的小明 (01背包)
- nyoj 49 开心的小明 【DP】【01背包】
- NYOJ 题目49开心的小明(01背包)
- 开心的小明(南阳oj49)(01背包)
- NYOJ 49 开心的小明(01背包问题)
- easyUI treeGrid异步加载,前端+后台实现,包括增删改等具体功能
- #90 k Sum II
- centos7安装npm和nodejs
- 线性表基本操作
- 火狐浏览器内容默认样式表
- NYOJ49 开心的小明 DFS/01背包
- CPISI training and certification
- Linux间进程通信方式
- light oj 1094(初学邻接表)
- navicat 快捷键
- CodeForces 702B Powers of Two
- 《java面向对象编程》笔记-2
- Android中实现跑马灯效果
- ios imageView添加点击事件