QAQ永动机 @ 2019-03-30 09:49:51
rt
#include<bits/stdc++.h>
using namespace std;
struct food
{
int a;
int b;
int c;
};
food a[100],f[100];
int n,t;
bool cmp(food a,food b)
{
return a.c*b.b<b.c*a.b;
}
int main()
{
cin>>t>>n;
for(int i=1;i<=n;i++)
cin>>a[i].a ;
for(int i=1;i<=n;i++)
cin>>a[i].b ;
for(int i=1;i<=n;i++)
cin>>a[i].c ;
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
{
for(int j=t;j-a[i].c>= 0;j--)
{
int x=a[i].a ;
int y=a[i].b ;
int z=a[i].c ;
int tmp=f[j-z]+x-j*y;
if(f[j]<tmp)
{
f[j]=tmp;
}
}
}
cout<<f[t];
return 0;
}
by 御坂13558号 @ 2019-03-30 10:42:37
cmp应该是一个重载了()运算符的结构体
by 御坂13558号 @ 2019-03-30 10:43:37
啊啊啊当我没说
by 御坂13558号 @ 2019-03-30 10:46:12
应该是:
struct food{
int a,b,c;
bool operator < (food b){
return return a.c*b.b>b.c*a.b;
}
};
by QAQ永动机 @ 2019-03-30 10:58:50
@璀璨天狼 哈?完整代码能发一下吗(这个我看不懂QAQ)
by 御坂13558号 @ 2019-03-30 11:06:38
#include<bits/stdc++.h>
using namespace std;
struct food
{
int a;
int b;
int c;
bool operator < (food b){
return a.c*b.b>b.c*a.b;
}
};
food a[100],f[100];
int n,t;
int main()
{
cin>>t>>n;
for(int i=1;i<=n;i++)
cin>>a[i].a ;
for(int i=1;i<=n;i++)
cin>>a[i].b ;
for(int i=1;i<=n;i++)
cin>>a[i].c ;
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
{
for(int j=t;j-a[i].c>= 0;j--)
{
int x=a[i].a ;
int y=a[i].b ;
int z=a[i].c ;
int tmp=f[j-z]+x-j*y;
if(f[j]<tmp)
{
f[j]=tmp;
}
}
}
cout<<f[t];
return 0;
}