苹果
来源:互联网 发布:圆周率计算次数java 编辑:程序博客网 时间:2024/04/27 14:50
题目地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=289
苹果
时间限制:3000 ms | 内存限制:65535 KB
难度:3
- 描述
ctest有n个苹果,要将它放入容量为v的背包。给出第i个苹果的大小和价钱,求出能放入背包的苹果的总价钱最大值。
- 输入
- 有多组测试数据,每组测试数据第一行为2个正整数,分别代表苹果的个数n和背包的容量v,n、v同时为0时结束测试,此时不输出。接下来的n行,每行2个正整数,用空格隔开,分别代表苹果的大小c和价钱w。所有输入数字的范围大于等于0,小于等于1000。
- 输出
- 对每组测试数据输出一个整数,代表能放入背包的苹果的总价值。
- 样例输入
3 31 12 13 10 0
- 样例输出
2
- 来源
- 动态规划经典问题
- 上传者
- ctest
代码:
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int a[1001][1001];int main(){ int n,v; while(scanf("%d%d",&n,&v)&&n&&v) { memset(a,0,sizeof(a)); int x,y; for(int i=0;i<=v;i++) a[0][i]=0; for(int i=1; i<=n; i++) { scanf("%d%d",&x,&y); for(int j=0; j<v; j++) { if(j+1>=x) a[i][j]=max(y+a[i-1][j-x],a[i-1][j]); else a[i][j]=a[i-1][j]; } } printf("%d\n",a[n][v-1]); } return 0;}
身为一个正直勇敢得人,将先前得代码改进了一下下:
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int main(){ int n,v,c,w,r[1234]={0}; while(scanf("%d%d",&n,&v)&&n&&v) { memset(r,0,sizeof(r)); for(int i=0;i<n;i++) { scanf("%d%d",&c,&w); for(int j=v;j>=0;j--)//将先前的二维数组换成了一维的,倒着来; { if(j>=c) r[j]=max(r[j],r[j-c]+w); } } printf("%d\n",r[v]); } return 0;}
阅读全文
0 0
- 《苹果》
- 苹果
- 苹果
- 苹果
- 苹果
- 苹果
- 苹果
- 苹果
- 苹果
- 苹果
- 苹果
- 苹果
- 苹果
- 苹果
- 苹果
- 苹果
- 苹果
- 苹果
- 最大似然估计
- VSCode 书签的使用 (BookMark)
- vue 引入公共css文件
- Java JsonParseException异常的解决
- 高可用,高并
- 苹果
- 测试人眼中的车联网(比亚迪云服务-3.2.1)——物联网的通用功能测试模式
- MQTT协议_MQTT协议简介
- 解决装了sqlserver 后apache就运行不了的问题
- Dubbo开发直连调试
- PAT甲级 1047. Student List for Course (25)
- 关于flexbox一些练习
- MyEclipse中文乱码/编码设置
- Ubuntu中PPA源是什么