hdu 1502 字符串dp与高精度运算(mark)
来源:互联网 发布:淘宝买高达模型推荐 编辑:程序博客网 时间:2024/05/01 23:19
难得的dp思路都是对的,但是没想到高精度
dp思路:以目前某一种字符还可以放多少个为d数组下标 数组内存储有多少种。
我的:
#include <stdio.h>
#include<string.h>
int n,d[65][65][65];
int dp(int i,int j,int k)
{
if(i==0&&j==0&&k==0)return0;
if(d[i][j][k])returnd[i][j][k];
if(i>j&&j>k)
{
if(k>0)
d[i][j][k]=dp(i,j-1,k)+dp(i,j,k-1)+dp(i-1,j,k);
if(k==0)
d[i][j][k]=dp(i,j-1,k)+dp(i-1,j,k);
}
if(i==j&&j>k)
{
if(k>0)
d[i][j][k]=dp(i,j-1,k)+dp(i,j,k-1);
if(k==0)
d[i][j][k]=dp(i,j-1,k);
}
if(i>j&&j==k)
{
if(k>=1)
{
d[i][j][k]=dp(i,j,k-1)+dp(i-1,j,k);
}
if(k==0)
{
d[i][j][k]=dp(i-1,j,k);
}
}
if(i==j&&j==k&&k>=1)
{
d[i][j][k]=dp(i,j,k-1);
}
returnd[i][j][k];
};
int main(int argc,constchar * argv[]) {
while(1)
{
if(scanf("%d",&n)!=1)
break;
memset(d,0,sizeof(d));
d[1][0][0]=1;
printf("%d\n\n",dp(n,n,n));
}
return0;
}
#include <string.h>
#include <algorithm>
using namespace std;
char dp[65][65][65][85];
void add(char a[],char b[],char back[])
{
int i,j,k,up,x,y,z,l;
char *c;
if(strlen(a) > strlen(b))
l = strlen(a)+2;
else
l = strlen(b)+2;
c = (char*)malloc(l*sizeof(char));
i = strlen(a)-1;
j = strlen(b)-1;
k = 0;
up = 0;
while(j>=0 || i>=0)
{
if(i<0) x = '0';
else
x = a[i];
if(j<0) y = '0';
else
y = b[j];
z = x-'0'+y-'0';
if(up)
z++;
if(z>9)
{
up = 1;
z%=10;
}
else
up = 0;
c[k++] = z+'0';
i--;
j--;
}
if(up)
c[k++] = '1';
i = 0;
c[k] = '\0';
for(k-=1; k>=0; k--)
back[i++] = c[k];
back[i] = '\0';
}
int main()
{
int n,i,j,k;
for(i = 0; i<=60; i++)
for(j = 0; j<=60; j++)
for(k = 0; k<=60; k++)
strcpy(dp[i][j][k],"0");
strcpy(dp[1][0][0],"1");
strcpy(dp[1][1][0],"1");
strcpy(dp[1][1][1],"1");
for(i = 2; i<=60; i++)
{
for(j = 0; j<=i; j++)
{
for(k = 0; k<=j; k++)
{
if(i-1>=j)
add(dp[i-1][j][k],dp[i][j][k],dp[i][j][k]);
if(j-1>=k)
add(dp[i][j-1][k],dp[i][j][k],dp[i][j][k]);
if(j>=k-1)
add(dp[i][j][k],dp[i][j][k-1],dp[i][j][k]);
}
}
}
while(~scanf("%d",&n))
{
printf("%s\n\n",dp[n][n][n]);
}
return 0;
}
- hdu 1502 字符串dp与高精度运算(mark)
- uva10069(DP + 高精度运算)
- HDU 1002 (高精度加法运算)
- Hdu 1502 Regular Words (java高精度 + DP)
- hdu 1502 Regular Words_高精度+dp
- HDU-5568 sequence2(DP+高精度)
- hdu 1042 N! 高精度运算
- hdu 5568 高精度(重要) DP
- HDU 5568 sequence2 DP+高精度
- HDU 1753 大明A+B(高精度浮点数运算)
- hdu 1502 Regular Words DP + 高精度 第一个java
- 高精度运算(转)
- 大数(高精度)运算
- HDU 1074The Highest Mark(状压DP)
- 高精度总结(高精度类和重载运算高精度阶乘)
- 大数减法 (高精度运算)
- 大数高精度运算(模板)
- 高精度运算(运算符重载)
- 浅谈C++多态性
- stm32调试,进入 HardFault_Handler
- 你是我的小玫瑰花!!!
- 性能优化-Server优化
- C++中智能指针的设计和使用
- hdu 1502 字符串dp与高精度运算(mark)
- 程序在内存中的分布
- WebForm 使用log4net
- libconfig第一篇———使用指南
- iOS 沙盒文档路径
- Jar 包的打包和使用,实现多人合作;
- 自定义cell的高度(新浪微博)
- linux删除大量文件----rm,rsync
- 给asp文件加后门