POJ 1850 Code
来源:互联网 发布:手机能注册淘宝店铺吗 编辑:程序博客网 时间:2024/05/29 18:57
下标都弄得我头晕。我先打表把以某字母开头长度为i的方案数都预先存储。然后再从输入的字符串里面分解:
假设为 cdvx字符串,把长度为1,2,3的所有方案数相加,然后从做到右来分析,第一个字符c,第一个字符最小必须为a,把a,b开头长度为4的方案数加起来;第二个字符最小必须为‘c’+1也就是d,所以这个不管;v这个位置必须大于'd',所以又把‘e’~‘u’开头长度为2的方案数加起来,最后一位一样的做法。
到这里应该知道解题的方法了,有人说这是杨辉三角,把打表的结果输出来一看真的是杨辉三角,但是做法是一样的。
代码:
#include<iostream>using namespace std;int dp[30][30],cnt[30]; //dp为以某字符开头长度为i的方案数,cnt为长度为i的所有方案数。int main(){ int i,j,k,sum,temp; for( i=1;i<=26&&(dp[1][i]=1);i++); cnt[1]=26; for( i=2,sum=26;i<=26;i++){ temp=0; for( j=1;j<=27-i;j++){ sum-=dp[i-1][j]; dp[i][j]=sum; temp+=sum; } sum=temp; cnt[i]=sum; } char str[15]; while( scanf("%s",str)!=EOF){ sum=0; bool flag=true; int len=strlen(str); for( i=1;i<len;i++){ if( str[i]-str[i-1]<=0){ //判断有没有降序的情况 flag=false; break;} else sum+=cnt[i]; } if( flag){ for( i=0;i<len;i++){ //按分析解题 j=( i==0? 1:str[i-1]-'a'+2 ); for( ;j<=str[i]-'a';j++) sum+=dp[len-i][j]; } printf("%d\n",sum+1); } else printf("0\n"); } return 0; }
修改一下,原来没想那么多现在有种更好的思路,补上去,没有前面那么复杂。很好理解,看代码就懂了。组合数学,选出来的字符自然会组成有序。
代码:
#include<iostream>using namespace std;const int M=27;int C[27][27];int main(){ int i,j; memset(C,0,sizeof(C)); for(i=0;i<M;i++) for(j=0;j<=i;j++) if(i==0||j==0) C[i][j]=1; else C[i][j]=C[i-1][j-1]+C[i-1][j]; int len,ans; char start,ch,str[27]; bool flag; while( scanf("%s",str)!=EOF){ len=strlen(str); flag=true; for(i=1;i<len&&flag;i++) if(str[i-1]>str[i]){ flag=false;break;} if(!flag){printf("0\n");continue;} for( i=1,ans=1;i<len;i++) ans+=C[26][i]; for( i=0,start='a';i<len;i++){ for( ch=start;ch<str[i];ch++) ans+=C['z'-ch][len-i-1]; start=str[i]+1; } printf("%d\n",ans); } return 0; }
- poj 1850 Code
- poj 1850 Code
- poj 1850 code
- poj 1850 Code
- poj 1850 Code
- poj 1850 Code
- poj 1850 Code
- POJ 1850 Code
- POJ 1850 Code
- poj 1850 Code
- POJ 1850 Code
- poj 1850 Code
- POJ 1850 Code
- POJ 1850 Code
- POJ 1850--Code
- POJ 1850 Code
- POJ - 1850 Code
- POJ 1850 Code
- jquery 接收后台传过来的 Dictionary<string, string>的值
- 学习笔记之day1
- Java模式设计之单例模式
- BrowserManager Returns null - Flex 4.5
- Java实践(五)——类的声明与引用
- POJ 1850 Code
- Linux启动Oracle,关闭防火墙
- 数理逻辑:谓词逻辑(1)谓词(俄汉对照)
- java 下载文件
- .net 中文传参(比较实用)
- visio如何扩大画布的大小. 鼠标移到画布的边界按住Ctrl,就可以拉大
- 雨中飘荡的回忆
- Google发布代码转换工具 可移植安卓程序至iOS
- 使用XML+XSLT实现业务表单