解题思路:
注意事项:
参考代码:#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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复