代码
第一题
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; }