不AC就吃__ @ 2020-08-07 19:18:49
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int w[61][3],c[61][3],f[32001],k[61];
int main()
{
int m,n,num=0;
cin>>m>>n;
for(int i=1;i<=n;i++)
{
int w1,c1,ms;
cin>>w1>>c1>>ms;
if(ms!=0)
{
w[ms][++k[ms]]=w1;
c[ms][k[ms]]=w1*c1;
}
else
{
w[i][0]=w1;
c[i][0]=w1*c1;
}
}
/*
for(int i=1;i<=n;i++)
{
cout<<w[i][0]<<" "<<w[i][1]<<" "<<w[i][2]<<endl;
cout<<c[i][0]<<" "<<c[i][1]<<" "<<c[i][2]<<endl;
cout<<endl;
}
*/
//输入部分完成
//决策有不选,选主件,选主件+附件1,选主件+附件2,选主件+附件1+附件2
for(int i=1;i<=n;i++)
for(int v=m;v>=w[i][0];v--)
{
if(k==0)//这里没写下标也不知道其他点怎么过的,改了下标第六个点也没过QAQ
f[v]=max(f[v],f[v-w[i][0]]+c[i][0]);//不选和选主件
else
{
if(v>=w[i][0]+w[i][1])
f[v]=max(f[v],f[v-w[i][0]-w[i][1]]+c[i][0]+c[i][1]);
if(v>=w[i][0]+w[i][2])
f[v]=max(f[v],f[v-w[i][0]-w[i][2]]+c[i][0]+c[i][2]);
if(v>=w[i][0]+w[i][1]+w[i][2])
f[v]=max(f[v],f[v-w[i][0]-w[i][1]-w[i][2]]+c[i][0]+c[i][1]+c[i][2]);
}
}
cout<<f[m];
return 0;
}
by 不AC就吃__ @ 2020-08-07 19:25:37
洛谷数据和添柴是一样的
第六个点输出是36400
我按第六个点的输入是35600
by lzh009 @ 2023-08-05 15:58:43
@不AC就吃__
你可以下载一下数据,然后根据数据判断,是第六点就直接输出第六点的答案,不是的话再进行计算
(如果你特别看重分数的话可以这样蹭分,但是我不建议这样做——
话说我是看到你的名字才这样提的建议
(我也不大会,写了半天结果全RE
了