快排
int Partion(int A[],int low,int high){
int pivot = A[low];
while(low < high){
while(low < high && A[high] >= pivot)--high;
A[low] = A[high];
while(low < high && A[low] <= pivot)++low;
A[high] = A[low];
}
A[low] = pivot;
return low;
}
void QuickSort(int A[],int low,int high){
if(low < high){
int pos = Partion(A,low,high);
QuickSort(A,low,pos-1);
QuickSort(A,pos+1,high);
}
}
歸併
void Merge(int A[],int low,int mid,int high){
for(i = low;i <= high;i++)B[i] = A[i];
for(i = low,j = mid+1,k=i;i <= mid && j <= high;k++){
if(B[i] <= B[j])A[k] = B[i++];
else A[k] = B[j++];
}
while(i <= mid)A[k++] = B[i++];
while(j <= high)A[k++] = B[j++];
}
void MergeSort(int A[],int low,int high){
if(low < high){
int mid = (low+high) / 2;
MergeSort(A,low,mid);
MergeSort(A,mid+1,high);
Merge(A,low,mid,high);
}
}
北大點菜
int main(){
int c,n;
cin >> c >> n;
int v[n+1],p[n+1];
for(int i = 1;i <= n;i++)cin >> p[i] >> v[i];
int dp[n+1][c+1];
for(int i = 0;i <= n;i++){
dp[i][0] = 0;
}
for(int i = 0;i <= c;i++)dp[0][i] = 0;
for(int i = 1;i <= n;i++){
for(int j = 1;j <= c;j++){
if(j < p[i])dp[i][j] = dp[i-1][j];
else dp[i][j] = max(dp[i-1][j],dp[i-1][j-p[i]]+v[i]);
}
}
// for(int i = 0;i <= n;i++){
// for(int j = 0;j <= c;j++){
// cout << dp[i][j] << " ";
// }
// cout << endl;
// }
cout << dp[n][c] << endl;
return 0;
}
// 40 2
// 25 30
// 10 8
八皇后
int main(){
int b;
while(cin >> b){
dfs(0,b);
}
}
void dfs(int n,int b){
if(n > 7){
total++;
if(total == b)print();
return;
}
for(int i = 0;i < 8;i++){
if(check(n,i)){
arr[n][i] = 1;
dfs(n+1,b);
arr[n][i] = 0;
}
}
}
bool check(int m,int n){
for(int i = 0;i < m;i++){
if(arr[i][n] == 1)return false;
}
for(int i = m-1,j = n-1;i >=0 && j >= 0;i--,j--){
if(arr[i][j] == 1)return false;
}
// for(int i = m+1,j = n+1;i < 8,j < 8;i++,j++){
// if(arr[i][j] == 1)return false;
// }
for(int i = m-1,j = n+1;i >= 0,j < 8;i--,j++){
if(arr[i][j] == 1)return false;
}
// for(int i = m+1,j = n-1;i < 8,j >= 0;i++,j--){
// if(arr[i][j] == 1)return false;
// }
return true;
}
void print(){
for(int i = 0;i < 8;i++){
for(int j = 0;j < 8;j++){
if(arr[i][j] == 1)cout << j+1;
}
}
cout << endl;
}