2019 뉴커머스 국경일 3-G & CF1238E

8463 단어
뉴커G:
N 크기의 그룹 a[]를 정하고 M 그룹 관계를 정하고 a[]를 다시 배열하며sum{M 그룹 관계의 절대값의 차이를 최소화합니다.먼저 a를 정렬한 다음에 순서대로 a를 수조에 채워라.
i가 바이너리 아래에 x개의 1이 있다고 가정하고 dp[i]로 dp[i|(1<
#include 
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=20;
int a[N],p[N],e[N];
ll f[1<<N];
int main(){
    int n,m;
    while(scanf("%d%d",&n,&m)!=EOF) {
        for(int i=0;i)
            scanf("%d",&a[i]);
        sort(a,a+n); //  ,      
        for(int i=0;i) {
            e[i]=0;
            p[i]=0;
        }
        for(int i=0;i) {
            int a,b;
            scanf("%d%d",&a,&b);
            a--;b--;
            p[a]|=1<1<<a;
            e[a]++,e[b]++;
        }
        f[0]=0;
        for(int i=1;i1<) {
            f[i]=1e12;
            int k=__builtin_popcount(i)-1; //      a[k]
            for(int j=0;j) {
                if(i&(1<<j)) {//  a[k]  posj 
                    f[i]=min(f[i],f[i^(1<2-e[j]));
                }
            }
        }
        printf("%lld
",f[(1<1]); } return 0; }

 
CF-E:
제목: M팀 관계(ai,bi)를 정하고 다시 배열하여 {관계의 위치는 절대값의 합}을 최소화합니다.
여전히 매거진으로 누구를 채우느냐에 따라 이번 라운드의 공헌은 만족(ai는 이미 채웠고bi는 채우지 않았다)의 개수다.
#include
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=2000010;
char c[maxn]; int dp[maxn],f[30][30];
int main()
{
    int N,M;
    scanf("%d%d%s",&N,&M,c+1);
    memset(dp,0x3f,sizeof(dp));
    rep(i,1,N-1) f[c[i]-'a'][c[i+1]-'a']++,f[c[i+1]-'a'][c[i]-'a']++;
    dp[0]=0;
    rep(i,0,(1<1){
        int t=0;
        rep(j,0,M-1) {
            if(i&(1<<j)){
                rep(k,0,M-1)
                 if(!(i&(1<f[j][k];
            }
        }
        rep(j,0,M-1) if(!(i&(1<1<1<t);
    }
    printf("%d
",dp[(1<1]); return 0; }

좋은 웹페이지 즐겨찾기