讨论 / 运行超时AC80,求问提升运行速度的办法
mint wang 2017-04-21 08:23:29
点我顶贴 收藏 删除
#include <stdio.h>

#define X 25

int c[X]={0};

void pro1 (int b);

void pro2 (int b,int d);

int chec (int b,int d);

void update (int a);

int sum1(int a[],int b[][2],int d);

int sum2(int a[],int b[][2],int d);

int main ()

{

int i,j,n,m;

int k=0;

int temp;

int check;

scanf("%d %d",&m,&n);

int data[n][2];

for (i=0;i<n;i++)

scanf("%d %d",&data[i][0],&data[i][1]);

int resu[2]={0};

for (i=1;i<n+1;i++)

{

update(i);

while (1)

{

temp=sum1(c,data,i);

if (temp<=m)

resu[1]=sum2(c,data,i);

if(resu[1]>resu[0])

resu[0]=resu[1];

check=chec(i,n);

if (check==1)

pro1(i);

else if (check==2)

pro2(i,n);

else if (check==3)

break;

}

}

printf("%d",resu[0]);

return 0;

}

int chec (int b,int d)

{

int i,p=0;

if (c[b-1]<d-1)

return 1;

else if (c[b-1]==d-1)

{

for (i=0;i<b;i++)

if (c[i]!=d-b+i)

p++;

if (p!=0)

return 2;

else

return 3;

}

}

void pro1 (int b)

{

c[b-1]++;

}

void pro2 (int b,int d)

{

int i,q;

for (i=0;i<b;i++)

if (c[b-1-i]!=d-1-i)

{

q=i+1;

break;

}

c[b-q]++;

for (i=b-q;i<b-1;i++)

c[i+1]=c[i]+1;

}

int sum1(int a[],int b[][2],int d)

{

int i;

int q=0;

for (i=0;i<d;i++)

q+=b[a[i]][0];

return q;

}

int sum2(int a[],int b[][2],int d)

{

int i;

int q=0;

for (i=0;i<d;i++)

q+=b[a[i]][0]*b[a[i]][1];

return q;

}

void update (int a)

{

int i;

for (i=0;i<X;i++)

c[i]=0;

for (i=0;i<a;i++)

c[i]=i;

}

#1 officeyutong@2017-04-23 01:49:51
回复 删除
#include <iostream>

#include <vector>

#include <algorithm>

typedef long long int lli;

using namespace std;

int * money;

int * value;

inline int max(int a, int b) {

if (a > b) return a;

else return b;

}

int maxValue(int endIndex, int maxMoney) {

if (endIndex == 1)

{

if (money[endIndex] <= maxMoney) return value[endIndex];

else return 0;

}

int result1 = maxValue(endIndex - 1, maxMoney);

int result2;

if(maxMoney - money[endIndex]>0)

result2=maxValue(endIndex - 1, maxMoney - money[endIndex]) + value[endIndex];

else result2 = 0;

return max(result1, result2);

}

int main() {

int maxMoney, itemCount;

cin >> maxMoney >> itemCount;

money = new int[itemCount + 1];

value = new int[itemCount + 1];

for (int i = 1; i <= itemCount; i++) {

cin >> money[i];

int weight;

cin >> weight;

value[i] = weight*money[i];

}

cout << maxValue(itemCount, maxMoney);

delete[] money;

delete[] value;

}

查看更多回复
提交回复