完全背包问题。
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <stack>
#include <algorithm>
using namespace std;
const int maxd = 100000 + 10;
const int INF = 1 << 20;
int t;
int main(){
int v[2];
while(scanf("%d%d%d",&v[0],&v[1],&t) != EOF){
int dp[maxd];
for(int i = 0 ; i <= t ; i ++) dp[i] = - INF;
dp[0] = 0;
for(int i = 0 ; i < 2 ; i++)
for(int j = 0 ; j <= t ; j ++)
if(j - v[i] >= 0){
dp[j] = max(dp[j],dp[j - v[i]] + 1);
}
for(int i = t ; i >= 0 ; i --){
if(dp[i] >= 0){
if(i == t)
printf("%d\n",dp[i]);
else
printf("%d %d\n",dp[i],t - i);
break;
}
}
}
return 0;
}
本文介绍了一个简单的完全背包问题实现案例,使用C++编程语言通过动态规划的方法求解物品的最大组合数量。该算法适用于物品可以重复选取的情况,并给出了具体的实现代码。
245

被折叠的 条评论
为什么被折叠?



