小垃圾的跟班


私信TA

用户名:1298743454

访问量:11130

签 名:

等  级
排  名 1826
经  验 2519
参赛次数 0
文章发表 23
年  龄 0
在职情况 学生
学  校 陕西科技大学
专  业

  自我简介:

解题思路:

注意事项:

参考代码:#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int dp[105][1005];
int main(int argc, char const *argv[]) {
  int t,x;
  cin>>t>>x;//t为总时间,x是个数
  int time[105],value[105];
  for(int i=1;i<=x;i++){
    cin>>time[i]>>value[i];//输入数据
  }
  memset(dp,0,sizeof(dp));//对数组进行初始化
  for(int i=1;i<=x;i++){
    for(int j=t;j>=1;j--){//时间从最大开始
      if(j>=time[i]){
        dp[i][j]=max(dp[i-1][j],dp[i-1][j-time[i]]+value[i]);
        //进行最大价值的更新
        //如果不放入则t时间不变,如果放入则减去时间。这就相当于往背包里面放入东西
        //总时间就相当于背包的容量。
        //减去时间之后还要加上第i个价值,然后进行更新
      }
      else
    dp[i][j]=dp[i-1][j];
    //第i个东西的价值已将放不进背包了,所以输出i-1.
    }
  }
  cout<<dp[x][t]<<endl;
  return 0;
}

 

0.0分

1 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答

代码解释器

  评论区