前言:
这篇文章还是为了帮助一些
像我这样的菜鸟
找简单的题解
问题描述:
有n种物品,每种物品都有一个重量和一个价值。但是每件物品的数量是无限的,同时有一个背包,最大负荷是M,现在从n个项目中选择几个项目(同一个项目可以多次选择),使其重量和小于等于M,价值和为最大。
第一行:两个整数,M(背包容量)和N(物品数量);
第2~N 一行:每行两个整数Wi、Ci,表示每个项目的重量和价值。
只有一行,一个数字,表示最大总值。
10 4 2 1 3 3 4 5 7 9
max=12
对于 30% 的数据:N<=200, M<=200 ;
对于 70% 的数据:N<=5000, M<=5000 ;
对于 100% 的数据:N<=10000, M<=10000, 0<=ci, wi <=1000
问题解析:
完全背包是01背包的轻微变化
每个项目的价值和重量都需要考虑
使用动态规划
还是两个问题是上一期的高级?
完整代码:
#include <bits/stdc .h> using namespace std; int N,V; int v[10010],val[10100]; int dp[10010]; int main() { cin>>V>>N; for(int i=1; i<=N; i ) { cin>>v[i]>>val[i]; } for(int i=1; i<=N; i ) for(int j=0; j<=V; j ) { //dp[j]=dp[j]; if(j>=v[i]) { dp[j]=max(dp[j],dp[j-v[i]] val[i]);///转换方程 } } cout<<"max="<<dp[V]; return 0; }