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; }