250 简单题
// BEGIN CUT HERE
// END CUT HERE
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <ctime>
#include <utility>
#include <iterator>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef set<int> si;
typedef map<int,int> mii;
typedef map<string,int> msi;
typedef pair<int,int> pii;
typedef priority_queue<int,vector<int>,greater<int> > pless;
typedef priority_queue<int> pgreater;
#define clr(x,a) memset(x,a,sizeof(x))
#define sz(x) (int)x.size()
#define pb push_back
#define mp make_pair
#define REP(i,n) for(i=0;i<(n);++i)
#define FOR(i,l,h) for(i=(l);i<=(h);++i)
#define FORD(i,h,l) for(i=(h);i>=(l);--i)
class SumOfPower
{
public:
int sum[60];
int findSum(vector <int> array)
{
clr(sum,0);
int n=sz(array);
for(int i=0;i<n;i++)
sum[i+1]=sum[i]+array[i];
int res=0;
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++)
res+=sum[j]-sum[i-1];
return res;
}
// BEGIN CUT HERE
// END CUT HERE
};
// BEGIN CUT HERE
// END CUT HERE
500 简单题 ,期望
// BEGIN CUT HERE
// END CUT HERE
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <ctime>
#include <utility>
#include <iterator>
using namespace std;
typedef long long ll;
#define clr(x,a) memset(x,a,sizeof(x))
#define sz(x) (int)x.size()
#define pb push_back
#define mp make_pair
#define REP(i,n) for(i=0;i<(n);++i)
#define FOR(i,l,h) for(i=(l);i<=(h);++i)
#define FORD(i,h,l) for(i=(h);i>=(l);--i)
const double eps=1e-9;
class FixedDiceGameDiv2
{
public:
double getExpectation(int a, int b)
{
double res=0;
double total=0,pt=0;
int i,j,k;
FOR(i,1,a)
FOR(j,1,min(i-1,b)){
pt+=i;
total++;
}
return pt/total;
}
// BEGIN CUT HERE
// END CUT HERE
};
// BEGIN CUT HERE
// END CUT HERE
1000
首先用floyd处理任意两点之间的最短距离
设f[i][k] 表示从k移动到N 使用了i次tricks所使用的最小耗费
针对每次使用tricks的一条边 u=s[i], v=t[i] , w=weight[i]
f[i+1][k]=min(f[i][k],f[i+1][k],dist[k][u]-w+f[i][v]) 其中注意f[i][k]代表放弃使用第i+1次trick
再不是用tricks的时候任意两个点的最短距离等于floyd处理的矩阵,而当使用k次tricks时,最短距离使用上一行的递推式进行递推。
// BEGIN CUT HERE
// END CUT HERE
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <ctime>
#include <utility>
#include <iterator>
using namespace std;
typedef long long ll;
#define clr(x,a) memset(x,a,sizeof(x))
#define sz(x) (int)x.size()
#define pb push_back
#define mp make_pair
#define REP(i,n) for(i=0;i<(n);++i)
#define FOR(i,l,h) for(i=(l);i<=(h);++i)
#define FORD(i,h,l) for(i=(h);i>=(l);--i)
#define INF 0x3f3f3f3
class NegativeGraphDiv2
{
public:
int dist[60][60];
long long f[2600][60];
long long findMin(int N, vector <int> s, vector <int> t, vector <int> weight, int charges)
{
int i,j,k,n;
n=sz(s);
FOR(i,1,N){
FOR(j,1,N)
dist[i][j]=INF;
dist[i][i]=0;
}
REP(i,n)
if(s[i]!=t[i])
dist[s[i]][t[i]]=min(dist[s[i]][t[i]],weight[i]);
FOR(k,1,N)
FOR(i,1,N)
FOR(j,1,N)
dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j]);
FOR(i,1,N)
f[0][i]=dist[i][N];
FOR(k,1,charges){
FOR(i,1,N){
f[k][i]=f[k-1][i];
REP(j,n){
int u,v,w;
u=s[j];v=t[j];w=-weight[j];
f[k][i]=min(f[k][i],dist[i][u]+w+f[k-1][v]);
}
}
}
return f[charges][1];
}
// BEGIN CUT HERE
// END CUT HERE
};
// BEGIN CUT HERE
// END CUT HERE