#include<iostream>
using namespace std;constint N =50, M =210;int m, n;int w[N], v[N], f[M];intmain(){
cin >> m >> n;for(int i =1; i <= n; i ++) cin >> w[i]>> v[i];for(int i =1; i <= n; i ++){for(int j = m; j >= w[i]; j --){
f[j]=max(f[j], f[j-w[i]]+ v[i]);}}
cout << f[m];return0;}
1290 采药
#include<iostream>
using namespace std;constint N =105, M =1010;int m, n;int w[N], v[N], f[M];intmain(){
cin >> m >> n;for(int i =1; i <= n; i ++) cin >> w[i]>> v[i];for(int i =1; i <= n; i ++){for(int j = m; j >= w[i]; j --){
f[j]=max(f[j], f[j-w[i]]+ v[i]);}}
cout << f[m];return0;}
1294 Charm Bracelet
#include<iostream>
using namespace std;constint N =4000, M =13000;int m, n;int w[N], v[N], f[M];intmain(){
cin >> n >> m;for(int i =1; i <= n; i ++) cin >> w[i]>> v[i];for(int i =1; i <= n; i ++){for(int j = m; j >= w[i]; j --){
f[j]=max(f[j], f[j-w[i]]+ v[i]);}}
cout << f[m];return0;}
1295 装箱问题
#include<iostream>
using namespace std;constint N =50, M =20010;int m, n;int w[N], f[M];intmain(){
cin >> m >> n;for(int i =1; i <= n; i ++) cin >> w[i];for(int i =1; i <= n; i ++){for(int j = m; j >= w[i]; j --){
f[j]=max(f[j], f[j-w[i]]+ w[i]);}}
cout << m - f[m];return0;}
1268 完全背包问题
#include<iostream>
using namespace std;constint N =50, M =210;int m, n;int w[N], v[N], f[M];intmain(){
cin >> m >> n;for(int i =1; i <= n; i ++) cin >> w[i]>> v[i];for(int i =1; i <= n; i ++){for(int j = w[i]; j <= m; j ++){
f[j]=max(f[j], f[j-w[i]]+ v[i]);}}
cout <<"max="<< f[m];return0;}
1291 数字组合
#include<iostream>
using namespace std;constint N =30, M =1010;int m, n, a[N], f[M];intmain(){
cin >> n >> m;for(int i =1; i <= n; i ++) cin >> a[i];
f[0]=1;for(int i =1; i <= n; i ++){for(int j = m; j >= a[i]; j --){
f[j]+= f[j-a[i]];}}
cout << f[m];return0;}
1293 买书
#include<iostream>
using namespace std;constint N =30, M =1010;int n, a[5]={0,10,20,50,100}, f[M];intmain(){
cin >> n;
f[0]=1;for(int i =1; i <=4; i ++){for(int j = a[i]; j <= n; j ++){
f[j]+= f[j-a[i]];}}
cout << f[n];return0;}
1273 货币系统
#include<iostream>
using namespace std;constint N =1e4+10, M =1e4+10;int n, m, a[N];longlong f[M];intmain(){
cin >> n >> m;for(int i =1; i <= n; i ++) cin >> a[i];
f[0]=1;for(int i =1; i <= n; i ++){for(int j = a[i]; j <= m; j ++){
f[j]+= f[j-a[i]];}}
cout << f[m];return0;}
1269 庆功会(多重背包)
#include<iostream>
using namespace std;constint N =510, M =6010;int n, m, v[N], w[N], s[N], f[M];intmain(){
cin >> n >> m;for(int i =1; i <= n; i ++) cin >> v[i]>> w[i]>> s[i];for(int i =1; i <= n; i ++){for(int j = m; j >=0; j --){for(int k =0; k <= s[i]; k ++){if(k*v[i]<= j){
f[j]=max(f[j], f[j - k*v[i]]+ k*w[i]);}}}}
cout << f[m];return0;}
1272 分组背包
#include<iostream>
using namespace std;constint N =50, M =210;int m, n, t;int w[N], v[N], p[N], f[M];intmain(){
cin >> m >> n >> t;for(int i =1; i <= n; i ++) cin >> w[i]>> v[i]>> p[i];for(int i =1; i <= t; i ++){for(int j = m; j >=0; j --){for(int k =1; k <= n; k ++){if(p[k]== i){if(w[k]<= j) f[j]=max(f[j], f[j-w[k]]+ v[k]);}}}}
cout << f[m];return0;}
1270 混合背包
#include<iostream>
using namespace std;constint M =205, N =50;int m, n, w[N], c[N], p[N], f[M];intmain(){
cin >> m >> n;for(int i =1; i <= n; i ++) cin >> w[i]>> c[i]>> p[i];for(int i =1; i <= n; i ++){if(p[i]==0){for(int j = w[i]; j <= m; j ++){
f[j]=max(f[j], f[j-w[i]]+ c[i]);}}else{for(int j = m; j >=0; j --){for(int k =0; k <= p[i]; k ++){if(j >= k*w[i]) f[j]=max(f[j], f[j-k*w[i]]+ k*c[i]);}}}}
cout << f[m];return0;}
1267 01背包问题#include <iostream>#include <cstdio>using namespace std;const int N = 50;int m, n;int w[N], v[N], f[210];int main() { cin >> m >> n; for (int i = 1; i <= n; i ++) cin >> w[i] >> v[i]; for (int