lightoj 1068 数位DP
2013-09-28 10:10
375 查看
终于AC了
一直超时。。。。。。
注意dp的设定。。。。。。
开始的时候一直是内存超了
注意一点就是当K〉=95之后结果一定是0.。。。。。。。。。。
AC代码如下:
一直超时。。。。。。
注意dp的设定。。。。。。
开始的时候一直是内存超了
注意一点就是当K〉=95之后结果一定是0.。。。。。。。。。。
AC代码如下:
#include <iostream> #include <cstdio> #include <cstring> #include <string> using namespace std; int digit[20]; int dp[11][95][95][2]; int K; int DFS( int pos, int pre, int pre_sum, bool limit ){ if( pos == 0 ){ return pre == 0 && pre_sum == 0; } if( !limit && dp[pos][pre][pre_sum][limit==1] != -1 ){ return dp[pos][pre][pre_sum][limit==1]; } int end = limit ? digit[pos] : 9; int sum = 0; for( int i = 0; i <= end; i++ ){ sum += DFS( pos - 1, ( pre * 10 + i ) % K, ( pre_sum + i ) % K, limit && i == end ); } return dp[pos][pre][pre_sum][limit==1] = sum; } int solve( int N ){ int len = 0; while( N ){ digit[++len] = N % 10; N /= 10; } return DFS( len, 0, 0, true ); } int main(){ int T, Case = 1; int A, B; cin >> T; while( T-- ){ memset( dp, -1, sizeof( dp ) ); cin >> A >> B >> K; if( K >= 95 ){ cout << "Case " << Case++ << ": " << 0 << endl; continue; } cout << "Case " << Case++ << ": " << solve( B ) - solve( A - 1 ) << endl; } return 0; }
相关文章推荐
- lightoj 1068 - Investigation (数位DP)
- lightoj 1068(数位dp)
- LightOJ 1068 - Investigation(数位DP)
- Lightoj1068——Investigation(数位dp)
- LightOJ - 1068 Investigation(数位DP)
- lightoj 1068 - Investigation 数位DP
- lightOJ 1068 - Investigation (数位dp)
- Lightoj 1068(数位DP)
- LightOJ 1068 - Investigation (数位dp)
- lightoj - 1068 Investigation (数位dp)
- LightOJ 1068 Investigation (数位dp)
- LightOJ 1068 Investigation (数位dp)
- LightOJ 1068 Investigation (数位DP)
- Lightoj1068——Investigation(数位dp)
- LightOJ1068 Investigation(数位DP)
- Light OJ 1068 Investigation (数位DP)
- lightoj 1191 数位DP
- lightoj 1205 数位DP
- Lightoj 1037 数位DP
- LightOJ 1021 Painful Bases 【状压DP+数位DP】