P1064 金明的预算方案

思路:就是一个背包问题  因为数据范围小,所以不把 1个带附着物的东西 拆成 带1个带2个或不带

#include<bits/stdc++.h>
using namespace std;
const int maxn=30000+10;
int f[maxn];
int zhujianw[maxn],zhujianv[maxn],cijianw[maxn][3],cijianv[maxn][3];
int main(){
int n,m;
cin>>n>>m;
int v,p,q; for(int i=1;i<=m;i++){
cin>>v>>p>>q;
if(!q){
zhujianw[i]=v,zhujianv[i]=v*p;
}
else {
cijianw[q][0]++;
cijianw[q][cijianw[q][0]]=v;
cijianv[q][cijianw[q][0]]=v*p;
} } for(int i=1;i<=m;i++){
for(int j=n;zhujianw[i]&&j>=zhujianw[i];j--){
f[j]=max(f[j],f[j-zhujianw[i]]+zhujianv[i]);
if(j>=zhujianw[i]+cijianw[i][1])
f[j]=max(f[j],f[j-zhujianw[i]-cijianw[i][1]]+zhujianv[i]+cijianv[i][1]);
if(j>=zhujianw[i]+cijianw[i][2])
f[j]=max(f[j],f[j-zhujianw[i]-cijianw[i][2]]+zhujianv[i]+cijianv[i][2]);
if(j>=zhujianw[i]+cijianw[i][1]+cijianw[i][2])
f[j]=max(f[j],f[j-zhujianw[i]-cijianw[i][1]-cijianw[i][2]]+zhujianv[i]+cijianv[i][1]+cijianv[i][2]);
}
}
cout<<f[n]<<endl;
return 0;
}

  

上一篇:TP5.1:数据库的增删改查操作(基于数据库操作)


下一篇:Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示