ACM代码整理.docx

上传人:b****4 文档编号:12073625 上传时间:2023-04-16 格式:DOCX 页数:10 大小:16.30KB
下载 相关 举报
ACM代码整理.docx_第1页
第1页 / 共10页
ACM代码整理.docx_第2页
第2页 / 共10页
ACM代码整理.docx_第3页
第3页 / 共10页
ACM代码整理.docx_第4页
第4页 / 共10页
ACM代码整理.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

ACM代码整理.docx

《ACM代码整理.docx》由会员分享,可在线阅读,更多相关《ACM代码整理.docx(10页珍藏版)》请在冰豆网上搜索。

ACM代码整理.docx

ACM代码整理

排列组合问题

publicclass数的分解{

publicstaticvoidmain(String[]args){

inta[]=newint[100];

intn=6;

f(10,a,0);

}

publicstaticvoidf(intn,inta[],intk){

if(n<=0){

for(inti=0;i

System.out.print(a[i]+"");

}

System.out.println();

return;

}

for(inti=n;i>0;i--){

if(k>0&&i>a[k-1])

continue;

a[k]=i;

f(n-i,a,k+1);

}

}

}

组合排列:

publicclass打印组合排列数{

publicstaticvoidmain(String[]args){

Scannersc=newScanner(System.in);

charc[]=sc.next().toCharArray();

charb[];

for(inti=1;i<=c.length;i++){

b=newchar[3];

组合(c.length,3,c,b);

}

}

publicstaticvoid组合(intn,intk,charc[],charb[]){

inti;

if(k==0){

Strings="";

for(intj=0;j

System.out.print(b[j]);

}

System.out.println();

全排列(0,s.toCharArray());

return;

}else{

for(intj=0;j

b[k-1]=c[j];

组合(j,k-1,c,b);

}

}

}

publicstaticvoid全排列(intk,charc[]){

if(k>=c.length){

for(inti=0;i

System.out.print(c[i]);

}

System.out.println();

return;

}

for(inti=k;i

{chartemp=c[i];c[i]=c[k];c[k]=temp;}

全排列(k+1,c);

{chartemp=c[i];c[i]=c[k];c[k]=temp;}

}

}

}

importjava.util.Scanner;

整数部分和

publicclass整数部分和{

staticintsum=0;

staticbooleanvisit[]=newboolean[40];

staticbooleanflag=false;

staticinta[]=newint[40];

staticintn,k;

publicstaticvoidmain(String[]args){

Scannersc=newScanner(System.in);

while(sc.hasNextInt()){

n=sc.nextInt();

k=sc.nextInt();

for(inti=0;i

a[i]=sc.nextInt();

visit[i]=false;

}

flag=false;

dfs(0);

if(flag==false)

System.out.println("NO");

}

}

publicstaticvoiddfs(intpos){

//if(flag)

//return;

if(sum>=k){

if(sum==k){

if(!

flag){

flag=true;

System.out.println("YES");

}

for(inti=0;i

if(visit[i])

System.out.print(a[i]+"");

}

System.out.println();

}

return;

}

for(inti=pos;i

sum+=a[i];

visit[i]=true;

dfs(i+1);

sum-=a[i];

visit[i]=false;

}

}

}

动态规划

单调递增子函数

#include

#include

constintmaxn=10001;

chars[maxn];

intdp[maxn],Max;

voidLICS()

{

intlen;

memset(dp,0,sizeof(dp));

len=strlen(s);

for(inti=0;i

{

dp[i]=1;//给定一个数组求的时候,初始值就是1,一个数组的最大序列肯定会有一个字符;

for(intj=0;j

{

if(s[i]>s[j]&&dp[i]<1+dp[j])//递推公式,如果这个位置比前面的字符都大,就加入到递增序列中来

dp[i]=1+dp[j];

}

}

Max=0;

for(inti=0;i

if(Max

Max=dp[i];

}

intmain()

{

intt;

scanf("%d",&t);

while(t--)

{

scanf("%s",s);

LICS();

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

}

return0;

}

公共最长子序列

#include

#include

#definemax(a,b)a>b?

a:

b

usingnamespacestd;

constintmaxn=1001;

intdp[maxn][maxn];//保存当前位置最长公共子序列的个数

chars1[maxn],s2[maxn];

intmain()

{

intn;

intlen1,len2;

scanf("%d",&n);

getchar();

while(n--)

{

memset(dp,0,sizeof(dp));

scanf("%s%s",s1,s2);

len1=strlen(s1);

len2=strlen(s2);

for(inti=1;i<=len1;i++)

for(intj=1;j<=len2;j++)

{

if(s1[i-1]==s2[j-1])//先前这个地方写成s1[i]==s2[j]就一直wa不知道为什么,样例都能过

dp[i][j]=dp[i-1][j-1]+1;

else

dp[i][j]=max(dp[i][j-1],dp[i-1][j]);

}

printf("%d\n",dp[len1][len2]);

}

return0;

}

 dp[i][j] = max(dp[i][j-1], dp[i-1][j]);

大数问题:

publicclass数字分割{

publicstaticvoidmain(String[]args){

Scannersc=newScanner(System.in);

while(sc.hasNext()){

Stringn=sc.nextLine().trim();

NumberFormatnf=NumberFormat.getInstance();

nf.setGroupingUsed(true);

nf.setMaximumFractionDigits

(2);

nf.setMinimumFractionDigits

(2);

nf.setRoundingMode(RoundingMode.HALF_UP);

BigDecimalss=newBigDecimal(n);

BigDecimalo=newBigDecimal("-0.000001");

if(pareTo(o)<1){

System.out.print("(");

System.out.print(nf.format(ss.multiply(newBigDecimal("-1"))));

System.out.println(")");

}else{

System.out.println(nf.format(ss));

}

}

}

}

高精度幂次方

publicclass高精度幂次方{

publicstaticvoidmain(String[]args){

Scannersc=newScanner(System.in);

while(sc.hasNextBigDecimal()){

BigDecimalR=sc.nextBigDecimal().stripTrailingZeros();

intn=sc.nextInt();

DecimalFormatdf=newDecimalFormat("");

df.setGroupingUsed(false);

if(R.pow(n).compareTo(BigDecimal.ONE)<0){

if(R.pow(n).equals(BigDecimal.ZERO)||R.pow(n).toString().length()<=3)

System.out.println(0);

else

System.out.println(df.format(newBigDecimal(R.pow(n).toPlainString().substring

(1))));

}

else

System.out.println(df.format(R.pow(n)));

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1