第十四届华中科技大学程序设计竞赛决赛 F.Beautiful Land(01背包变形)


       题目链接:https://www.nowcoder.com/acm/contest/119/F

      题意是有T组数据,然后输入n,m,表示有n种树,最大容量是m,然后n行输入每种树的花费和价值,问能得到的最大价值,看一眼数据范围就知道不是简单的裸的01背包了,这种题之前也见过好多次,需要把最小容量最大价值的问题转换成按照价值去求最小花费。


AC代码:

#include 
#include 
#include 
#include 
#define ll long long
using namespace std;
ll dp[10000005];
ll val[105],v[105];
ll T,n,m;

int main()
{
  scanf("%lld",&T);
  while(T--){
    scanf("%lld%lld",&n,&m);
    int sum = 0;
    for(int i=0;i=val[i];j--){
        dp[j] = min(dp[j], dp[j - val[i]] + v[i]);
      }
    }
    // int ans = -1;
    for(int i=sum;i>=0;i--){
      if(dp[i] <= m){
        printf("%d\n",i);
        break;
      }
    }
  }
  return 0;
}

你可能感兴趣的:(ACM_动态规划,补题补题补题)