xuzhenghao @ 2019-03-03 19:31:00
哪位大佬帮忙看一下哪儿错了谢谢(P1064金明的预算方案) 祝他(她)天天大吉
using namespace std;
struct Point
{
int v, p;//分别表示价格和重要度
int attv[3], attp[3];
//attv表示第k个附件的价格,attp表示第k个附件的重要度
int k;//当前有k个附件
};
Point a[70];
int n, m, f[40000];
int cnt;//主件的个数
//分五种情况
//1.不选,然后去考虑下一个
//2.选且只选这个主件
//3.选这个主件,并且选附件1
//4.选这个主件,并且选附件2
//5.选这个主件,并且选附件1和附件2.
int max_five(int i, int j)
{
int maxn = 0;
maxn = max (maxn, f[j]);//不选
if (j - a[i].v >= 0) maxn = max (maxn, f[j - a[i].v] + a[i].v * a[i].p);//如果放得下只选主件
if (j - a[i].v - a[i].attv[1] >= 0) maxn = max (maxn, f[j - a[i].v - a[i].attv[1]] + a[i].v * a[i].p + a[i].attv[1] * a[i].attp[1]);
//如果放得下只选主件和附件1
if (j - a[i].v - a[i].attv[2] >= 0 )maxn = max (maxn, f[j - a[i].v - a[i].attv[2]] + a[i].v * a[i].p + a[i].attv[2] * a[i].attp[2]);
//如果放得下只选主件和附件2
if (j - a[i].v - a[i].attv[1] - a[i].attv[2] >= 0)
maxn = max (maxn, f[j - a[i].v - a[i].attv[1] - a[i].attv[2]] + a[i].v * a[i].p + a[i].attv[1] * a[i].attp[1] + a[i].attv[2] * a[i].attp[2]);
//如果放得下选主件、附件1和附件2
return maxn;
}
int main ()
{
cin >> n >> m;//输入
for (int i = 1; i <= m; i++)
{
int x, y, z;
cin >> x >> y >> z;
if (z == 0)
{
cnt++;
a[cnt].v = x;
a[cnt].p = y;
}
//如果是主件,就放入第cnt个主件中
else
{
a[z].k++;
a[z].attv[a[z].k] = x;
a[z].attp[a[z].k] = y;
}
//如果是附件,就放入第cnt个主件中的附件中
}
for (int i = 1; i <= m; i++)
{
for (int j = 0; j <= cnt; j++)
{
f[j] = max_five (i, j);
}
}
for (int i = 1; i <= cnt; i++) cout << f[i]
<< " ";
cout << f[cnt] << endl;
return 0;
}
by xuzhenghao @ 2019-03-03 19:31:35
谢谢大佬们点进这个帖子
by aminoas @ 2019-03-03 19:32:10
希望更丰富的展现?使用Markdown
by xuzhenghao @ 2019-03-03 19:32:46
点进来的人不是帅哥就是美女
天天有人向你表白
一定能追到心仪的对象
by Chara·Fun·Foxy @ 2019-03-03 19:37:55
#include <cstdio>
#include <cstring>
using namespace std;
int f[32010],v[70],q[70],p[70],v1[70],q1[70],v2[70],q2[70];
int mymax(int x,int y)
{
return x>y?x:y;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
memset(f,-1,sizeof(f));
memset(q,0,sizeof(q));
memset(q1,0,sizeof(q1));
memset(q2,0,sizeof(q2));
memset(v,0,sizeof(v));
memset(v1,0,sizeof(v1));
memset(v2,0,sizeof(v2));
f[0]=0;
for (int i=1;i<=m;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if (c==0)
{
v[i]=a;q[i]=b;
}
else
{
if (q1[c]==0) {q1[c]=b;v1[c]=a;}
else {q2[c]=b;v2[c]=a;}
}
}
for (int i=1;i<=m;i++)
{
for (int j=n;j>=v[i];j--)
{
{
if (j-v[i]>=0) f[j]=mymax(f[j],f[j-v[i]]+v[i]*q[i]);//只买一个主件
if (j-v[i]-v1[i]>=0) f[j]=mymax(f[j],f[j-v[i]-v1[i]]+v[i]*q[i]+v1[i]*q1[i]);//买主件和附件一
if (j-v[i]-v2[i]>=0) f[j]=mymax(f[j],f[j-v[i]-v2[i]]+v[i]*q[i]+v2[i]*q2[i]);//买主件和附件二
if (j-v[i]-v1[i]-v2[i]>=0) f[j]=mymax(f[j],f[j-v[i]-v1[i]-v2[i]]+v[i]*q[i]+v1[i]*q1[i]+v2[i]*q2[i]);//买主件和两个附件
}
}
}
int ans=0;
for (int j=1;j<=n;j++)
{
if (f[j]>ans) ans=f[j];
}
printf("%d\n",ans);
return 0;
}
【滑稽】
by Chara·Fun·Foxy @ 2019-03-03 19:39:25
参考一下吧![]()
by Chara·Fun·Foxy @ 2019-03-03 19:42:39
@小Fun·Foxy 耶耶耶
by Chara·Fun·Foxy @ 2019-03-03 19:42:57
@小Fun·Foxy 耶耶耶
by Chara·Fun·Foxy @ 2019-03-03 19:43:07
@小Fun·Foxy 耶耶耶
by aminoas @ 2019-03-03 19:44:17
恶意刷屏者将被禁言
by Chara·Fun·Foxy @ 2019-03-03 19:46:53
怎么删