代码
第一题
0-1背包
#include<bits/stdc++.h>
using namespace std;
int va[10]={2,2,8,1,5,2},w[10]={2,3,1,5,4,3},n,v[20],ans;
//0-1beibao
int main()
{
scanf("%d",&n);
for(int i=0;i<6;i++){
for(int j=n;j>=va[i];j--){
if(v[j]<v[j-va[i]]+w[i]){
v[j]=v[j-va[i]]+w[i];
if(v[j]>ans) ans=v[j];
}
}
}
printf("%d\n",ans);
return 0;
} 第二题
深搜
#include<bits/stdc++.h>
using namespace std;
int va[15],w[15];
bool an,v[15];
void dfs(int j){
if(an) return;
if(j==9){
if((w[1]+w[2]+w[3]+w[4])==(w[4]+w[5]+w[6]+w[7])&&(w[1]+w[2]+w[3]+w[4])==(w[1]+w[7]+w[8]+w[9])){
an=1;
}
return ;
}
for(int i=1;i<=9;i++){
if(!v[i]){
w[j+1]==va[i];
v[i]=1;
dfs(j+1);
v[i]=0;
}
}
}
int main(){
for(int i=1;i<=8;i++){
scanf("%d,",&w[i]);
}
scanf("%d",&w[9]);
dfs(0);
if(an) printf("yes\n");
else printf("no\n");
return 0;
}