P1064 [NOIP2006 提高组] 金明的预算方案(DP)
2021/9/30 23:14:26
本文主要是介绍P1064 [NOIP2006 提高组] 金明的预算方案(DP),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
可以将分组的背包看成若干个01背包来做。
#include<cstdio> #include<iostream> using namespace std; int read(){ int num=0,f=1; char c=getchar(); while(c<'0'||c>'9'){ if(c=='-') f=-1; c=getchar(); } while(c>='0'&&c<='9'){ num=num*10+c-'0'; c=getchar(); } return num*f; } int n,m; int v[65][3],p[65][3]; int cnt; int f[32005]; int main(){ n=read(); m=read(); for(int i=1;i<=m;i++){ int vv=read(),pp=read(),qq=read(); if(qq==0){ v[i][0]=vv; p[i][0]=pp*vv; } else if(!v[qq][1]){ v[qq][1]=vv; p[qq][1]=pp*vv; } else{ v[qq][2]=vv; p[qq][2]=pp*vv; } } for(int i=1;i<=m;i++){ for(int j=n;j>=1;j--){ if(j-v[i][0]>=0){ f[j]=max(f[j],f[j-v[i][0]]+p[i][0]); } if(j-v[i][0]-v[i][1]>=0){ f[j]=max(f[j],f[j-v[i][0]-v[i][1]]+p[i][0]+p[i][1]); } if(j-v[i][0]-v[i][1]-v[i][2]>=0){ f[j]=max(f[j],f[j-v[i][0]-v[i][1]-v[i][2]]+p[i][0]+p[i][1]+p[i][2]); } } } printf("%d",f[n]); return 0; }
这篇关于P1064 [NOIP2006 提高组] 金明的预算方案(DP)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南