OIBH基础版普及组7月月赛 天天去旅行

来源:互联网 发布:windows 10可以投屏吗 编辑:程序博客网 时间:2024/06/06 15:40

题目:

Description

  暑假到了,天天和妈妈一起背包去西藏玩(话说西藏最近不清静啊~),天天想带好多东西的,可是,包包的容量是有限的,她,必须得扔掉些东西。她收拾包已经头昏脑胀的了,所以求助于你,希望你能帮自己算算能最多带多少东西。
  每个东西对于天天来说,有一个重要值,天天当然希望越重要的东西都带着咯,所以,你所需要做的,就是算出她能带东西的总最大重要值。

Input

第1行为天天想带的东西的数量n(n≤100)和包包的最大容量V(V≤1000)
第2~n+1行,每行三个数m[i]、p[i],分别表示这个物品的大小、重要度

Output

一个数,表示天天所能带的东西的最大重要度

Sample Input

3 71
72 100
69 1
1 1

Sample Output

2

作者思路:01背包(c++写的)

代码:

#include<stdio.h>#include<iostream>int n,m;int v[101],p[101],f[1001];int max(int x,int y){    if (x>y) return x; else return y;}using namespace std;int main(){    scanf("%d%d\n",&n,&m);    for(int i=1;i<=n;i++) scanf("%d%d\n",&v[i],&p[i]);    for(int i=1;i<=n;i++)    {        for(int j=m;j>=v[i];j--)        {            f[j]=max(f[j-v[i]]+p[i],f[j]);        }    }    printf("%d\n",f[m]);}
1 0
原创粉丝点击