uva 417 - Word Index(디지털 dp)
제목 연결: uva 417 - Word Index
제목 대의: 제목의 요구에 따라 문자열의 번호를 매깁니다. 현재 문자열을 매깁니다. 번호가 얼마인지 물어보세요. 문자열은 반드시 점차적으로 증가해야 합니다. 그렇지 않으면 번호가 0이어야 합니다.
문제풀이 사고방식: 주어진 문자열보다 작고 증가하는 문자열이 몇 개인지 계산하는 것이다.dp[i][j]는 i번째 자리가 주어진 문자열보다 작고 증가하는 문자열을 만족시키는 j임을 나타낸다.dp[i][j]=∑k=0j−1dp[i−1][k]. 경계를 처리할 때마다 주의하고 마지막에 자신의 열을 붙여야 한다.또한 경계를 처리할 때 dp[i][0]가 1로 부여되어 이전 i개가 비어 있는 상황을 나타낸다.#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 10;
char str[N];
int dp[N][3*N];
int solve () {
int len = strlen(str);
if (len == 1)
return str[0] - 'a' + 1;;
for (int i = 1; i < len; i++)
if (str[i] <= str[i-1])
return 0;
int pre = str[0] - 'a' + 2;
memset(dp, 0, sizeof(dp));
for (int i = 0; i + 'a' <= str[0]; i++)
dp[1][i] = 1;
for (int i = 1; i < len; i++) {
for (int j = 0; j <= 26; j++) {
for (int k = j+1; k <= 26; k++)
dp[i+1][k] += dp[i][j];
}
for (int j = pre; j + 'a' <= str[i]; j++)
dp[i+1][j]++;
pre = str[i] - 'a' + 2;
dp[i+1][0]++;
}
int ans = 1;
for (int i = 1; i <= 26; i++)
ans += dp[len][i];
return ans;
}
int main () {
while (scanf("%s", str) == 1) {
printf("%d
", solve());
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 10;
char str[N];
int dp[N][3*N];
int solve () {
int len = strlen(str);
if (len == 1)
return str[0] - 'a' + 1;;
for (int i = 1; i < len; i++)
if (str[i] <= str[i-1])
return 0;
int pre = str[0] - 'a' + 2;
memset(dp, 0, sizeof(dp));
for (int i = 0; i + 'a' <= str[0]; i++)
dp[1][i] = 1;
for (int i = 1; i < len; i++) {
for (int j = 0; j <= 26; j++) {
for (int k = j+1; k <= 26; k++)
dp[i+1][k] += dp[i][j];
}
for (int j = pre; j + 'a' <= str[i]; j++)
dp[i+1][j]++;
pre = str[i] - 'a' + 2;
dp[i+1][0]++;
}
int ans = 1;
for (int i = 1; i <= 26; i++)
ans += dp[len][i];
return ans;
}
int main () {
while (scanf("%s", str) == 1) {
printf("%d
", solve());
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.