反比例函数 @ 2018-10-07 17:15:14
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int main_v[32010],main_w[32010];
int annex_v[32010][3],annex_w[110][3];
int f[32010];
int main()
{
int n,m,i,j,v,w,q;
cin>>n>>m;
for(i=1;i<=m;i++)
{ cin>>v>>w>>q;
if(q==0)
{ main_w[i]=v;main_v[i]=v*w;}
else
{ annex_w[q][0]++;
annex_w[q][annex_w[q][0]]=v;
annex_v[q][annex_w[q][0]]=v*w;}}
memset(f,0,sizeof(f));
for(i=1;i<=m;i++)
for(j=n;main_w[i]!=0&&j>=main_w[i];j--)
{ f[j]=max(f[j],f[j-main_w[i]]+main_v[i]);
if(j>main_w[i]+annex_w[i][1])
f[j]=max(f[j],f[j-main_w[i]-annex_w[i][1]]+main_v[i]+annex_v[i][1]);
if(j>main_w[i]+annex_w[i][2])
f[j]=max(f[j],f[j-main_w[i]-annex_w[i][2]]+main_v[i]+annex_v[i][2]);
if(j>main_w[i]+annex_w[i][1]+annex_w[i][2])
f[j]=max(f[j],f[j-main_w[i]-annex_w[i][1]-annex_w[i][2]]+main_v[i]+annex_v[i][1]+annex_v[i][2]);}
cout<<f[n]<<endl;return 0;
}
WA最后两个点,什么原因?
by NaCly_Fish @ 2018-10-07 17:17:05
评测鸡被这码风吓坏了
by 引领天下 @ 2018-10-07 17:29:10
@反比例函数
您的代码如滔滔江水滚滚不绝,变量定义分3行写,各种诡异变量名,再加上丑陋无比的缩进,让我忍不住一下子吐了出来……此生得见如此恶心之码风,上辈子罪孽可偿还矣!
by tryrtj @ 2018-10-07 17:29:38
这风格略逊于我在手机上编的
by 权御天下 @ 2018-10-07 17:31:34
这码风...我得去格式化一下再读
by tryrtj @ 2018-10-07 17:31:40
#include<iostream>
using namespace std;
int a[100][100];int n;
int main(){cin>>n;
for(int i=0;i<n;i++)for(int j=0;j<n;j++)cout<<a[i][j];
return 0;
}
大概就是这种感觉(就当伪代码)
by NULL0x7f @ 2018-10-07 17:51:11
其实我觉得还好吧,还是说是用因为我自己代码也难看,同病相连?
by 反比例函数 @ 2018-10-07 19:44:02
好吧,我码风是,但是到底为什么WA2个点啊
by MornEveGlow @ 2018-10-20 14:26:46
修改了一下码风
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN=32e3+10;
int mv[MAXN],mw[MAXN];
int av[MAXN][3],aw[110][3];
int f[MAXN];
int main()
{
memset(f,0,sizeof(f));
int n,m,i,j,v,w,q;
cin>>n>>m;
for(i=1;i<=m;i++){
cin>>v>>w>>q;
if(q==0)mw[i]=v,mv[i]=v*w;
else aw[q][0]++,aw[q][aw[q][0]]=v,av[q][aw[q][0]]=v*w;
}
for(i=1;i<=m;i++)
for(j=n;mw[i]&&j>=mw[i];j--){
f[j]=max(f[j],f[j-mw[i]]+mv[i]);
if(j>mw[i]+aw[i][1])
f[j]=max(f[j],f[j-mw[i]-aw[i][1]]+mv[i]+av[i][1]);
if(j>mw[i]+aw[i][2])
f[j]=max(f[j],f[j-mw[i]-aw[i][2]]+mv[i]+av[i][2]);
if(j>mw[i]+aw[i][1]+aw[i][2])
f[j]=max(f[j],f[j-mw[i]-aw[i][1]-aw[i][2]]+mv[i]+av[i][1]+av[i][2]);
}
cout<<f[n]<<endl;
return 0;
}