#include<bits/stdc++.h>
using namespace std;
int res(int m, int n){
if(m < n){
return 0; //无鞋可借
}
if(n == 0){
return 1;//都有鞋穿了
}
return res(m - 1, n) + res(m, n - 1);
}
int main() {
int m, n;
cin >> m >> n;
int r = res(m, n);
cout << r;
return 0;
}
#include<iostream>
#include<vector>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int maxn = 1e4+5;
const int INF = 0x3f3f3f3f;
int n, dis[maxn];
bool book[maxn];
struct node
{
int v, w;
node() {}
node(int vv, int ww): v(vv), w(ww) {}
};
vector<node> g[maxn];
void spfa(int u)
{
memset(book, 0, sizeof(book));
for(int i = 1; i <= n; i++) dis[i] = INF;
dis[u] = 0;
queue<int> q;
q.push(u);
while(!q.empty())
{
u = q.front();
q.pop();
book[u] = 0;
for(int i = 0; i < g[u].size(); i++)
{
int v = g[u][i].v;
int w = g[u][i].w;
if(dis[u]+w < dis[v])
{
dis[v] = dis[u]+w;
if(!book[v])
{
book[v] = 1;
q.push(v);
}
}
}
}
}
int solve()
{
spfa(1);
int tmp = 0, tmpIndex;
for(int i = 1; i <= n; i++)
if(dis[i] > tmp)
tmp = dis[i], tmpIndex = i;
spfa(tmpIndex);
int ans = 0;
for(int i = 1; i <= n; i++)
if(dis[i] > ans)
ans = dis[i];
return ans*10+(1+ans)*ans/2;
}
int main(void)
{
while(cin >> n)
{
for(int i = 0; i < maxn; i++) g[i].clear();
for(int i = 1; i < n; i++)
{
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
g[u].push_back(node(v, w));
g[v].push_back(node(u, w));
}
printf("%d\n", solve());
}
return 0;
}
#include<bits/stdc++.h>
#define N 10
using namespace std;
int n;
int map_Q[N][N];
int posb[N]={0};
int posw[N]={0};
int tot = 0;
bool checkw( int cur) //检查函数
{
for( int i = 1; i < cur; i++)
if( posw[i] == posw[cur] || abs(i-cur) == abs(posw[i]-posw[cur]))
return false;
return true;
}
bool checkb( int cur) //检查函数
{
for( int i = 1; i < cur; i++)
if( posb[i] == posb[cur] || abs(i-cur) == abs(posb[i]-posb[cur]))
return false;
return true;
}
void dfs_white( int cur)
{
if( cur == n+1) //白皇后也全部放完,次数+1
{
tot++;
}
for( int i = 1; i <= n; i++)
{
if( posb[cur] == i) //表示第cur列的第i行位置已经被黑皇后占用,
continue; //结束当前循环,i+1
if( map_Q[cur][i] == 0) //再判断前提条件是否成立
continue;
posw[cur] = i; //尝试把第cur列的白皇后放在第i行上
if( checkw(cur)) //判断能否放置白皇后
dfs_white(cur+1); //递归
}
}
void dfs_black( int cur)
{
if( cur == n+1) //当黑皇后处理完时,再处理白皇后
{
dfs_white(1);
}
for( int i = 1; i <= n; i++)
{
if( map_Q[cur][i] == 0) //如果第cur列第i行满足放皇后的前提条件即 mp[cur][i] == 1
continue; //如果不满足,则结束当前循环,进行下一次循环即i+1。
posb[cur] = i; //就尝试把第cur列的黑皇后放在第i行上
if( checkb(cur)) //然后判断该尝试是否成立,如成立,则进行递归,如不成立,则尝试把当前列的黑皇后放在下一行(i+1行)上。
dfs_black(cur+1); //递归
}
}
int main(){
cin>>n;
for( int i = 1; i <= n; i++) //定义棋盘
for( int j = 1; j <= n; j++)
cin>>map_Q[i][j];
dfs_black(1); //先把黑皇后放在第一列
cout<<tot<<endl;
return 0;
}