SRM 512 div2
迟来的比赛总结。
256pt
这题算是比较水的一题,主要是排序一下,然后再分情况讨论一下就行了。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cmath>
#include <vector>
using namespace std;
class MarbleDecoration
{
public:
int maxLength(int R, int G, int B);
};
int MarbleDecoration::maxLength(int R, int G, int B)
{
vector<int>a;
a.clear();
a.push_back(R);
a.push_back(G);
a.push_back(B);
sort(a.begin(),a.end());
if(a[2]==0)
return 0;
if(a[1]==0)
return 1;
if(a[1]==a[2])
return 2*a[1];
return 2*a[1]+1;
}
512pt
这题主要是同步更新,累加
我的主要是从头开始进行枚举的。
枚举到第i天的时候。
sum-=a[i-7]; //i>=7
然后cost[i][j]+=cost[i-7][j]; //因为超过7天要买的是同一种
sum+=a[i]; //a[i]记录的是cost[i][0--m-1]的最小值
比赛快完的时候,我已经找出是初始化的问题了,过了样例赶紧交
想不到最后系统测试还是挂了,挂在初始化上
a[i]我初始化为100.
应该要大一点的,杯具a ==
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cmath>
#include <vector>
using namespace std;
class MysteriousRestaurant
{
public:
int maxDays(vector<string> prices, int budget);
};
int MysteriousRestaurant::maxDays(vector<string> p, int b)
{
int n=p.size();
int m=p[0].size();
int cost[55][55];
int a[55];
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(p[i][j]>='0' && p[i][j]<='9')
cost[i][j]=p[i][j]-'0';
else if(p[i][j]>='A' && p[i][j]<='Z')
cost[i][j]=p[i][j]-'A'+10;
else if(p[i][j]>='a' && p[i][j]<='z')
cost[i][j]=p[i][j]-'a'+36;
}
}
for(i=0;i<=7;i++)
a[i]=100000;
int sum=0;
for(i=0;i<n;i++)
{
if(i>=7)
{
sum-=a[i-7];
for(j=0;j<m;j++)
cost[i][j]+=cost[i-7][j];
}
a[i]=100000;
for(j=0;j<m;j++)
{
if(cost[i][j]<a[i])
a[i]=cost[i][j];
}
if(sum+a[i]>b)
break;
sum+=a[i];
}
return i;
}
浙公网安备 33010602011771号