NYOJ 289 苹果

来源:互联网 发布:mac是哪个国家 编辑:程序博客网 时间:2024/05/11 03:52

苹果

时间限制: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>#define max(a,b)   (a>b?a:b)struct point {int c,w;}a[1005];int dp[1005][1005];int main(){int n,v;while(scanf("%d%d",&n,&v)&&n||v){for(int i = 1; i <= n; i++){scanf("%d%d",&a[i].c,&a[i].w);}memset(dp,0,sizeof(dp));for(int i = 1; i <= n; i++){for(int j = 0; j <= v; j++){if(a[i].c <= j){dp[i][j] = max(dp[i-1][j],dp[i-1][j-a[i].c]+a[i].w);}else{dp[i][j] = dp[i-1][j];}}}printf("%d\n",dp[n][v]);}}
#include<cstdio>  #include<iostream>  #include<cstring>  using namespace std;  #define max(a,b)  (a>b?a:b)  struct point {      int c,w;  }a[1005];  int dp[1005];  int main(){      int n,v;      while(scanf("%d%d",&n,&v)&&(n+v)){          for(int i=1;i<=n;i++)              scanf("%d%d",&a[i].c,&a[i].w);          memset(dp,0,sizeof(dp));          for(int i=1;i<=n;i++)              for(int j=v;j>=a[i].c;j--)                 dp[j]=max(dp[j],dp[j-a[i].c]+a[i].w);          printf("%d\n",dp[v]);      }  }



0 0
原创粉丝点击