记录编号 |
575582 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOI 1997]积木游戏 |
最终得分 |
100 |
用户昵称 |
该账号已注销 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.044 s |
提交时间 |
2022-09-21 21:25:47 |
内存使用 |
1.17 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
struct zxc{
int a,b,c;
}l[110];
int n,m;
int f[110][110][3]={0};
int ans=0;
bool ck(int k1,zxc x,int k2,zxc y){
if(k1==1){
if(k2==1){
if(x.a<=y.a&&x.b<=y.b)
return 0;
if(x.a<=y.b&&x.b<=y.a)
return 0;
}
if(k2==2){
if(x.a<=y.a&&x.b<=y.c)
return 0;
if(x.a<=y.c&&x.b<=y.a)
return 0;
}
if(k2==3){
if(x.a<=y.b&&x.b<=y.c)
return 0;
if(x.a<=y.c&&x.b<=y.b)
return 0;
}
}
if(k1==2){
if(k2==1){
if(x.a<=y.a&&x.c<=y.b)
return 0;
if(x.a<=y.b&&x.c<=y.a)
return 0;
}
if(k2==2){
if(x.a<=y.a&&x.c<=y.c)
return 0;
if(x.a<=y.c&&x.c<=y.a)
return 0;
}
if(k2==3){
if(x.a<=y.b&&x.c<=y.c)
return 0;
if(x.a<=y.c&&x.c<=y.b)
return 0;
}
}
if(k1==3){
if(k2==1){
if(x.b<=y.a&&x.c<=y.b)
return 0;
if(x.b<=y.b&&x.c<=y.a)
return 0;
}
if(k2==2){
if(x.b<=y.a&&x.c<=y.c)
return 0;
if(x.b<=y.c&&x.c<=y.a)
return 0;
}
if(k2==3){
if(x.b<=y.b&&x.c<=y.c)
return 0;
if(x.b<=y.c&&x.c<=y.b)
return 0;
}
}
return 1;
}
int main(){
freopen("buildinggame.in","r",stdin);
freopen("buildinggame.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>l[i].a>>l[i].b>>l[i].c;
for(int i=1;i<=n;i++){
for(int j=1;j<=min(i,m);j++){
for(int q=j-1;q<i;q++){
for(int k1=1;k1<=3;k1++){
for(int k2=1;k2<=3;k2++){
int u;
if(k1==1)u=l[i].c;
if(k1==2)u=l[i].b;
if(k1==3)u=l[i].a;
f[j][i][k1]=max(f[j][i][k1],f[j-1][q][k2]+u);
if(ck(k1,l[i],k2,l[q])==0){
f[j][i][k1]=max(f[j][i][k1],f[j][q][k2]+u);
}}
}
}
}
}
for(int i=m;i<=n;i++){
for(int k=1;k<=3;k++)
ans=max(ans,f[m][i][k]);
}
cout<<ans<<endl;
return 0;
}