P1042 乒乓球(模拟)
题意:给定比赛分数,输出胜负比分。
首先考虑读入,按字符读入,然后存入数组中;
11分和21分进制处理方法相同,用函数处理;
其次考虑胜利的情况:一方分数大于11(21)而且比另一方高两分,
胜利后将积分清零。
最后考虑还可能剩一局的分数,输出即可。
void win(int x){
int l = 0, r = 0, i = 1;
while(i <= n){
if(ch[i] == 'W') l ++;
else r++;
i++;
if(l >= x || r >= x){
if(abs(l-r) >= 2){
cout << l << ":" << r << endl;
l = 0; r = 0;
}
}
}
cout << l << ":" << r << endl;
}
P1086 花生采摘(模拟,搜索)
dfs结合贪心思路:
考虑贪心每次从剩余的地点取出数目最大的,如果能走出去,说明可以采摘,就更新ans,
细节1:如果现在在路边,可以随意平移
细节2:取完得能走出去,算出需要的花费时间
dfs定义:在t时间内从x,y出发所能获得的最大花生数目
void dfs(int t, int x, int y){
int maxx = -1;
int mx, my;
for(int i = 1; i <= m; i++)
for(int j = 1; j <= n; j++){
if(map[i][j] > maxx){
maxx = map[i][j];
mx = i;
my = j;
}
}
if(y == 0) y = my;
if(!map[mx][my] || t <(abs(mx-x) + abs(my-y) + mx +1))
return ;
else{
ans += map[mx][my];
map[mx][my] = 0;
dfs(t - abs(mx-x) - abs(my-y) - 1,mx, my);
}
}
//
dfs(k,0,0); //