【 알고리즘 문제 】 바둑 이론: leetcode 486 수조 취수
3501 단어 동적 기획
【제목】:
정수조를 정하고 선수1은 수조의 머리나 꼬리에서 하나의 수를 선택하며 선수2는 나머지 부분의 머리나 꼬리에서 하나의 수를 선택하여 이 수조의 수가 다 뽑힐 때까지 순환한다.선수 하나, 둘 다 똑똑하다.선수가 1을 취한 수의 합치가 선수보다 큰지 판단하다.
【사고방식】:
pp[i][j]는 원수 그룹 중 i에서 j까지의 이 다수 중 게임 규칙에 따라 한 유저가 얻을 수 있는 최대 점수를 나타낸다.
dp[i][j]=max(sum[i][j]−dp[i+1][j],sum[i][j]−dp[i][j−1])
주: dp[i][j]=max(sum[i+1][j]-3-dp[i+1][j]+nums[i],sum[i][j-1]-3dp[i][j-1]+nums[j])
#include
#include
#include
#include
#include
using namespace std;
bool PredictTheWinner(vector<int>& nums)
{
int n = nums.size();
vector<vector<int>> dp(n, vector<int>(n));
vector<int> sum(n);
for (int i = 0; i < n; i++)
dp[i][i] = nums[i];
sum[0] = nums[0];
for (int i = 0; i < n - 1; i++)
sum[i + 1] = sum[i] + nums[i + 1];//
//
for (int i = 1; i < n; i++)
for (int j = 0; i + j < n; j++)
dp[j][i + j] = max(sum[i + j] - sum[j] + nums[j] - dp[j + 1][i + j], sum[i + j] - sum[j] + nums[j] - dp[j][i + j - 1]);
return 2 * dp[0][n - 1] >= sum[n - 1];
}
int main()
{
vector<int> vec{1,2,3,4,5,6};
cout<return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
01 가방, 완전 가방, 다중 가방 dp(동적 기획 입문 dp)01 가방은 2진법으로 직접 표시할 수 있지만 데이터 양이 너무 많으면 시간을 초과하는 것이 폭력이다.01 가방의 사상은 바로 이 물품에 대해 내가 넣은 가치가 큰지 안 넣은 가치가 큰지 비교하여 방정식 f[i][v...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.