源文件在我的网盘上。链接:http://pan.baidu.com/s/1qWPUDRm 密码:k52e
(只有机智的人才能看到我的链接)
机智的双重下划线~~~
T1
T1就是一个递推,这题目把我恶心到了。。。用double即可。上 代码。
#include#include int n,i,j,k,m,l,t,v,u,s,d;int coml[2000],comr[2000],man;double mat[2000][2000],mat2[2000],mat3[2000],ma;#define ubit 0xffffffffint main(){ freopen("elimination.in","r",stdin); freopen("elimination.out","w",stdout); scanf("%d",&n); m=1< >(i+1))<<(i+1); for(j=0;j ma){ ma=mat2[i]; man=i; } } printf("%d\n",man+1); return 0;}
T2
差分约束系统。。。调得我快Shit了(然后。。我会告诉你我还没过么?)
上 代码。
#include#include #define lowbit(x) (x&-x)int next[40000],to[40000],f[40000],len[40000],head[40000],hl,i,j,k,h;int ip,a,b,c,pp[40000],ppl,n;inline void addEdge(int f,int t,int w){ ++hl; next[hl]=head[f]; to[hl]=t; len[hl]=w; head[f]=hl;}int q[400000],qt,qh;bool iq[40000];void spfa(){ memset(f,0x7f,sizeof f); qh=0; qt=1; iq[n+1]=1; q[0]=n+1; f[n+1]=0; while(qh!=qt){ a=q[qh]; //printf("( %d ):#%d\n",qh,a); iq[a]=0; for(b=head[a];b!=0;b=next[b]){ //printf("Access #%d: pre dist %d , suf dist %d\n",to[b],f[to[b]],f[a]+len[b]); if(f[a]+len[b]
T3
一道机智的二分题目
先二分答案,再用DP检测答案是否可以。符合单调性(废话)。
DP方程:
$F\left[ i,j\right] =max \left\{\left\lfloor \frac{s-k\cdot a_i}{b_i} \right\rfloor +F\left[ i-1,j-k\right] \forall k \in \left[ 0,min\left\{ \left\lfloor \frac{s}{a_i} \right\rfloor ,j \right\}\right]\right\}$
//上代码#include#include int n,m,i,j,k,l,r,ans,mid,t;int p[1000][2],f[2][1000];int now,pp,t2;bool dp(int s){ memset(f,-1,sizeof f); now=0,pp=1; f[0][0]=0; for(i=0;i =m;}int main(){ freopen("software.in","r",stdin); freopen("software.out","w",stdout); scanf("%d%d",&n,&m); for(i=0;i