블루 브리지 컵 알고리즘 향상 사탕 완전 가방 변형

2072 단어 #동적 기획
처음에 문제를 잘못 이해했는데 m=n이라고 생각하고 하질인수를 쳐서 수량이 많지 않고 직접적으로 폭력적으로 판단했다.한 발 냈는데 50%밖에 안 됐는데...코드는 다음과 같습니다.
#include
#include
#include
#include
#include
#include
#define pk push_back
using namespace std;
const int INF=0x3f3f3f3f;

const int MAX=100005; //100005
int n;
int eul[MAX];
bool vis[MAX];
vectorvt[MAX];
void getEul()
{
    for(int i=0;isqrt(1.0*n))
                break;
            int t=n/k;
            if(t%2)
                t--;
            t/=2;
            ans=max(ans,t*k);
        }
        printf("%d
",ans); } return 0; }

문제를 다시 한 번 보고 나서야 m가 줄곧 변화하고 있다는 것을 발견하였다.역시 너무 못하네요. 55555...가방 문제라고는 생각도 못했어..나중에 큰 남자의 주의를 받아 이렇게 생각할 수 있었다. 배낭은 용량을 정해서 안에 물건을 넣고 최대 얼마까지 넣을 수 있는지.이 문제는 총량을 정해서 물건을 꺼내면 최대 얼마를 찾을 수 있는지를 정하는 것이다.그래서 가방 문제예요. 다시 생각해보면 완전 가방이에요.그러면 모든 질인수를 하나의 물품으로 간주하지만 쓸 수 있는지 없는지(즉 제거될 수 있는지)를 판단해야 한다.100% 코드는 다음과 같습니다.
#include
#include
#include
#include
#include
using namespace std;

const int MAX=100005;
int n;
bool vis[MAX];
int pri[MAX];
void getPri() //    
{
    memset(pri,0,sizeof(pri));
    memset(vis,false,sizeof(false));
    for(int i=2;isqrt(1.0*n))
                break;
            int ci=2*pri[i];//  ×2!
            for(int j=ci;j<=n;j++)//    
            {   //   j      
                if(j%pri[i]==0)// j    ,  
                    dp[j]=max(dp[j],dp[j-ci]+pri[i]);
            }
        }
        printf("%d
",dp[n]); } return 0; }

좋은 웹페이지 즐겨찾기