前面选择题有点难,反正..啥题都有~
第一题
题解:01背包,写个money的状态转移就行了。
#include <iostream> using namespace std; int t,n; int opt[200005]; int w[25],v[25]; int main() { scanf("%d%d",&t,&n); for(int i=1;i<=n;i++) { scanf("%d%d",&w[i],&v[i]); } for(int i=1;i<=n;i++) { for(int j=w[i];j<=t;j++) { opt[j]=max(opt[j],opt[j-w[i]]+v[i]); } } cout<<opt[t]<<endl; return 0; } /** 100 5 77 92 22 22 29 36 50 46 99 90 114 */
第二题
题解:数据可能比较水,不需要贪心求 %7 的方案,直接dfs暴力。
#include <iostream> #include <string.h> using namespace std; class Solution { public: /** * 返回亲7数个数 * @param digit int整型一维数组 组成亲7数的数字数组 * @param digitLen int digit数组长度 * @return int整型 */ int book[100005]; int opt[100005]; int a[100005]; int n,num=0; bool check() { long long opta = 0; for(int i=1;i<=n;i++) { opta = (long long)opta*10+(long long)opt[i]; } if(opta%7==0) return true; return false; } void dfs(int x) { if(x==n+1) { if(check()) { num++; } return; } for(int i=1;i<=n;i++) { if(book[i]==0) { opt[x]=a[i]; book[i]=1; dfs(x+1); book[i]=0; } } } int reletive_7(int* digit, int digitLen) { // write code here memset(book,0,sizeof(book)); n = digitLen; for(int i=0;i<digitLen;i++) { a[i+1]=digit[i]; } dfs(1); return num; } }; int main() { Solution s; int a[3]={1,1,2}; s.reletive_7(a,3); return 0; }
全部评论
(0) 回帖