上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 30 下一页
摘要: 思路:刚开始想复杂了。看解题报告后才知道这题挺简单的,看来还是要多训练啊!!!单独处理首位的数字,不能为0.其他的就好处理了,从大到小依次找下去就可以了……代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define ll __int64 9 #define pi acos(-1.0)10 #define MAX 100000511 using namespace std;12 char a[MAX],b[MAX];13 int c[11],d[11];14 int fi 阅读全文
posted @ 2013-09-11 21:00 _随心所欲_ 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 思路:容易知道,分解成素数的lcm肯定是最大的,因为假设分解成2个合数,设定x为他们的 最大公约数,那么他们的最小公倍数就要减少x倍了 然后如果是素数之间的最小公倍数,那么就只是他们的乘积,同样的n分解,没有 除的肯定比有除的大,因此可以得到结论 所以可以先晒一次素数,然后用这些素数填满那个n 这里填满也很容易想到是背包问题了,因为同一个素数可以用几次,所以就是一个 典型的多重背包了,就是dp[j] = lcm(dp[j - k] , dp[k]); 然后还有一个问题,就是对于所有素数取lcm,会导致结果很大,超int的 而且虽然有取mod,那么转移方程变为dp[j] = dp[j - k] 阅读全文
posted @ 2013-09-11 18:41 _随心所欲_ 阅读(330) 评论(0) 推荐(0) 编辑
摘要: 数位DP!!!代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define ll __int64 9 #define pi acos(-1.0)10 #define MAX 5000011 using namespace std;12 ll dp[22][15][200];13 int bit[22];14 ll dfs(int pos,int mod,int sum,bool f)15 {16 if(pos==-1) return mod==0;17 i... 阅读全文
posted @ 2013-09-11 17:52 _随心所欲_ 阅读(288) 评论(0) 推荐(0) 编辑
摘要: 思路:实际上求的是和小于等于n的质数的种类数!!!代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define ll __int64 9 #define pi acos(-1.0)10 #define MAX 5000011 using namespace std;12 int prime[1105],cnt;13 ll dp[1105][1100];14 bool f[1005];15 void init()16 {17 cnt=0;18 for(int... 阅读全文
posted @ 2013-09-09 16:50 _随心所欲_ 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 思路:每次枚举数字和也就是取模的f(x),这样方便计算。其他就是基本的数位Dp了。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define ll __int64 9 #define pi acos(-1.0)10 #define MAX 5000011 using namespace std;12 int bit[10],dp[10][90][90][90];13 int dfs(int pos,int num,int mod,int sum,bool f)14 {1 阅读全文
posted @ 2013-09-09 08:55 _随心所欲_ 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 1003 Rotation Lock Puzzle找出每一圈中的最大值即可代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define ll __int64 9 #define pi acos(-1.0)10 #define MAX 5000011 using namespace std;12 ll a[10][10],b[10];13 vectorq;14 int main(){15 int i,j,k,m,n;16 while(scanf("%d" 阅读全文
posted @ 2013-09-08 19:05 _随心所欲_ 阅读(351) 评论(0) 推荐(0) 编辑
摘要: 数位DP,注意状态DP的转移代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define ll __int64 9 #define mod 100000000710 using namespace std;11 struct node12 {13 ll n,sum,pow;14 node():n(0),sum(0),pow(0){}15 }dp[20][7][7];16 int bit[20];17 ll p1[20];18 node dfs(int po... 阅读全文
posted @ 2013-09-08 11:40 _随心所欲_ 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 思路:dp[i][j][k]:表示以j为支点时两边和为k的个数注意去掉0,00,000……等。代码如下: 1 #include 2 #include 3 #include 4 #define ll __int64 5 using namespace std; 6 int bit[20]; 7 ll dp[20][20][2000]; 8 ll dfs(int pos,int pre,int o,bool f) 9 {10 if(pos==-1) return pre==0;11 if(!f&&dp[pos][o][pre]!=-1) return dp[pos][o][pre] 阅读全文
posted @ 2013-09-06 09:30 _随心所欲_ 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 思路:数位DP 1 #include 2 #include 3 int bit[10],dp[10][10][13][2]; 4 int dfs(int pos,int pre,int mod,bool h,bool inf) 5 { 6 if(pos==-1) return h&&!mod; 7 if(!inf&&dp[pos][pre][mod][h]!=-1) return dp[pos][pre][mod][h]; 8 int i,ans=0; 9 int e=inf?bit[pos]:9;10 for(i=0;i<=e;i++){11 ... 阅读全文
posted @ 2013-09-05 21:46 _随心所欲_ 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 主要注意下0的情况就可以!!!链接:http://acm.uestc.edu.cn/problem.php?pid=1307代码如下: 1 #include 2 #include 3 #include 4 #define ll __int64 5 using namespace std; 6 int bit[10],dp[20][20]; 7 int dfs(int pos,int pre,bool h,bool f) 8 { 9 if(pos==-1) return h==0;10 if(!f&&dp[pos][pre]!=-1&&!h) return dp[ 阅读全文
posted @ 2013-09-05 21:30 _随心所欲_ 阅读(230) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 30 下一页