摘要:
// 做了好一会儿,数学// 将 n^n 转化为 10^(n*lg(n)),其中 // n*lg(n)的小数部分作为10的幂为个位数 #include#includeint main(void){ __int64 t; double n; scanf("%I64d",&t); while(t--) { scanf("%lf",&n); double temp=n*log10(n),t0; double a=modf(temp,&t0); //a为temp的小数部分,t0为整数部分 a=pow(10.0,a... 阅读全文
摘要:
//数学题,推理,64位#includeint main(void){ __int64 a[21][21]={0}; int n,m; for(int i=1;i<21;i++) a[i][1]=i; for(int i=2;i<21;i++) for(int j=2;j<=i;j++) if(i==j) a[i][j]=a[i][j-1]; else a[i][j]=a[i][j-1]+a[i-1][j]; while(scanf("%d%d",&n,&m)!=EOF) { ... 阅读全文
摘要:
//01背包,直接模板题 #include#includeint dp[1005];int v[1005],c[1005];int max(int a,int b){ return a>b?a:b;}int main(void){ int t,n,m; scanf("%d",&t); while(t--) { memset(dp,0,sizeof(dp)); scanf("%d%d",&n,&m); for(int i=1;i=c[i];j--) dp[j]=max(dp[j],dp[j-c[... 阅读全文
摘要:
//31MS 312K 873 B C++//二维DP,状态转移小变化 #include#includeint dp[25][1005];inline int max(int a,int b){ return a>b?a:b;}int main(void){ int t,n,m; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) s... 阅读全文
摘要:
//并查集+拓扑排序,‘=’ 用并查集处理#include#include#includeusing namespace std;vectornext[10005]; //相当于邻接表int set[10005]; //并查集数组int in[10005]; //记录入度int A[20005],B[20005]; char oper[20005];int n,m,sum;int find(int x){ return set[x]==x?x:find(set[x]);}int merge(int x,int y){ int a=find(x); int b=find... 阅读全文