2021.08.11(分組揹包+Codeforces Global Round 15)
阿新 • • 發佈:2021-08-12
------------恢復內容開始------------
程式碼:
#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #include<cmath> using namespace std; const int maxx=5e4+10; int a[maxx][6]; int main(){//連續替換 int t; scanf("%d",&t);View Codewhile(t--){ int n; scanf("%d",&n); for(int i=1;i<=n;i++){ for(int j=1;j<=5;j++){ scanf("%d",&a[i][j]); } } int a1; a1=1; for(int i=2;i<=n;i++){//首先先選出一個單方面適應的,再迴圈一遍確定一下這個是不是真的可以 ints=0; if(a[i][1]>a[a1][1]){ s++; } if(a[i][2]>a[a1][2]){ s++; } if(a[i][3]>a[a1][3]){ s++; } if(a[i][4]>a[a1][4]){ s++; }if(a[i][5]>a[a1][5]){ s++; } if(s>=3){ continue; }else{ a1=i; } } // printf("選出的:%d\n",a1); int flag=0; for(int i=1;i<=n;i++){ int s=0; if(i==a1){ continue; } if(a[i][1]>a[a1][1]){ s++; } if(a[i][2]>a[a1][2]){ s++; } if(a[i][3]>a[a1][3]){ s++; } if(a[i][4]>a[a1][4]){ s++; } if(a[i][5]>a[a1][5]){ s++; } if(s<3){ /* printf("不滿足的:%d\n",i); printf("\n");*/ flag++; break; } } if(flag==1){ printf("-1\n"); }else{ printf("%d\n",a1); } } }
注:先第一遍找到單向比較的,只要發現這個比另一個小就把當前值記為記錄,然後去和後面的進行迴圈。最後找到這個值以後,還無法確定這個是最後的決策,需要再進行一邊迴圈,確定這是不是最後的值
------------恢復內容結束------------