HDU5218 Game

이번 베 스 트 코드 컵 은 완전히 매 달 려 두 문제 만 풀 렸 다.gal 그 폭력 wa 문 제 를 계속 고민 하고 있 습 니 다.먼저 자신 이 담당 하 는 분야 의 문 제 를 보충 합 시다. 먼저 이 문제, dp.
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =사고: dp [i] [j] 가 i 개인 을 대표 할 때 현재 위치 가 0 (계산 편 의 를 위해 0 부터) 이면 위치 가 j 인 사람 이 이 길 수 있 습 니까?매 거 진 무 작위 로 숫자 에 대해 숫자 (현재 인원 수 를 구하 고 아웃 된 위 치 를 계산 합 니 다) 는 j 보다 크 고 j 보다 작 습 니 다 (j 와 같 으 면 안 됩 니 다) 상황 에 따라 아웃 된 j 의 새로운 위치 (조세 프 문제, 재 번호 와 유사 합 니 다) 를 계산 합 니 다.
#include 
#include
#include
#include
using namespace std;
int arr[300];
int n,m;
int dp[300][300];
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&m);
        for(int i=0;iscanf("%d",&arr[i]);
        memset(dp,0,sizeof(dp));
        dp[1][0]=1;

        for(int i=2;i<=n;i++)
        {
            for(int j=0;jfor(int k=0;kif((arr[k]-1)%i==j)continue;
                    if((arr[k]-1)%i1][j-(arr[k]-1)%i-1];
                    if((arr[k]-1)%i>j)dp[i][j]=dp[i-1][i-1-((arr[k]-1)%i-j)];
                    if(dp[i][j])break;
                }
            }
        }
        int ok=1,ans=0;
        for(int i=0;iif(dp[n][i])ans++;
        printf("%d
"
,ans); for(int i=0;iif(dp[n][i]) { if(ok)ok=0; else printf(" "); printf("%d",i+1); } printf("
"
); } return 0; }

좋은 웹페이지 즐겨찾기