您的位置:首页 > 其它

牛客练习赛7

2017-12-01 21:50 267 查看
退役不退坑,以后还是要每周打一场比赛,训练思维了。

看来是很久没敲竞赛代码了,很生疏了。其余几题明天再填~~~

在Alice和Bob⾯前的是两个骰⼦,上⾯分别写了六个数字。
Alice和Bob轮流丢掷骰⼦,Alice选择第⼀个骰⼦,⽽Bob选择第⼆个,如果 谁投掷出的数更⼤,谁就可以获胜。
现在给定这两个骰⼦上的6个数字,你需要回答是Alice获胜⼏率更⼤,还是 Bob获胜⼏率更⼤。(请注意获胜⼏率相同的情况)

输入描述:

第⼀⾏⼀个数T,表⽰数据个数。
接下来的每⼀组数据⼀共有2⾏,每⼀⾏有6个正整数,第⼀⾏是第⼀个骰 ⼦上的6个数,第⼆⾏是第⼆个骰⼦上的6个数。

输出描述:

输出T⾏,每⾏⼀个字符串。
如果Alice获胜⼏率更⼤,你需要输出Alice;
如果Bob获胜⼏率更⼤,你需 要输出Bob;如果获胜⼏率⼀样⼤,你需要输出Tie.


#include <bits/stdc++.h>

using namespace std;

int c[305][305];
int d[305][305];

int main()
{
//freopen("in.txt","r",stdin);
int n,m;
scanf("%d%d",&n,&m);

for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
scanf("%d",&c[i][j]);
}
sort(c[i]+1,c[i]+m+1);
for(int j = 1; j <= m; j++)
c[i][j] = c[i][j-1] + c[i][j];

}

memset(d,0x3f3f3f3f,sizeof(d));

for(int i = 1; i <= n; i++)
d[i][0] = 0;

for(int j = 1; j <= m; j++)
d[1][j] = j*j + c[1][j];

for(int i = 2; i <= n; i++) {
for(int j = i; j <= i*m; j++) {
d[i][j] = d[i-1][j];
if(j>=n*2) break;
for(int k = 1; k <= m; k++) {
if(j-k>=i-1)
d[i][j] = min(d[i][j],(k*k+d[i-1][j-k]+c[i][k]));
}
}
}

int ans = 0x3f3f3f3f;
//for(int j = n; j<= n*m; j++)
ans = min(ans,d

);

printf("%d\n",ans);

return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: