POJ 1185 포병 진지 문제풀이

1149 단어 DP
사고방식: 이전 사고방식과 같지만 여기서 최대 몇 개를 배열할 수 있도록 요구한다. 여기서 3차원을 열고 지난번과 지난번의 상태를 기록하고 다시 한 번 판정한다. 상태 이동 방정식은 dp[i][j][k]=max(dp[i][j][k], dp[i-1][k][t]+num[j])이다.
코드:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
const int N = 500+5;
const int MOD = 100000000;
const int INF = 0x3f3f3f3f;
using namespace std;
int n,m,top;
int cur[110],state[110],dp[110][110][110],num[110];
void init(){
    top = 0;
    int tot = 1 << m;
    for(int i = 0;i < tot;i++){
        if(i&(i<<1) || i&(i<<2)) continue;
        state[++top] = i;
        for(int j = 0;j < m;j++){
            if(i&1< ans) ans = dp[n][i][j];
        }
    }
    printf("%lld
",ans); return 0; }

좋은 웹페이지 즐겨찾기