记录编号 |
392465 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2006]金明的预算方案 |
最终得分 |
100 |
用户昵称 |
东林桂香 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.007 s |
提交时间 |
2017-04-07 20:53:41 |
内存使用 |
1.17 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<stack>
#include<queue>
#include<cstring>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
const int maxn=32010,maxv=32020;
int n,v,w[maxn],f[maxv],c[maxn],w1[maxn],w2[maxn],c1[maxn],c2[maxn],temp1,temp2,temp3,cnt=1,Max=-1;
int main(){
freopen("budget.in","r",stdin);
freopen("budget.out","w",stdout);
scanf("%d%d",&v,&n);v/=10;
for (int i=1;i<=n;i++){
scanf("%d%d%d",&temp1,&temp2,&temp3);temp1/=10;
if (!temp3){
w[i]=temp1*temp2;c[i]=temp1;
}
else {
if (!w1[temp3]){
w1[temp3]=temp1*temp2;c1[temp3]=temp1;
}
else{
w2[temp3]=temp1*temp2;c2[temp3]=temp1;
}
}
}
for (int k=1;k<=n;k++){
for (int V=v;V>=c[k];V--){
f[V]=max(f[V],f[V-c[k]]+w[k]);
if (c[k]+c1[k]<=V) f[V]=max(f[V],f[V-c[k]-c1[k]]+w[k]+w1[k]);
if (c[k]+c2[k]<=V) f[V]=max(f[V],f[V-c[k]-c2[k]]+w[k]+w2[k]);
if (c[k]+c1[k]+c2[k]<=V) f[V]=max(f[V],f[V-c[k]-c1[k]-c2[k]]+w[k]+w1[k]+w2[k]);
Max=max(Max,f[V]);
}
}
printf("%d",f[v]*10);
return 0;
}