码迷,mamicode.com
首页 > 其他好文 > 详细

3.16

时间:2020-03-17 21:06:50      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:rem   while   namespace   ios   art   sdn   const   relevant   style   

https://blog.csdn.net/azuremayfly/article/details/52278272

https://blog.csdn.net/Mr_wuyongcong/article/details/86624067?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

https://blog.csdn.net/Gx_Man_VIP/article/details/86632133?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

两种写法一种背包,一种记搜 记搜的一直调不出  与之前树形dp几题类似 记搜更快?n2?

由于取的是1的祖先,记搜时可以k+1开始搜 

#include<bits/stdc++.h>
using namespace std;
const int N=105;
int tot,a[N],head[N],d[N],f[N][N],vis[N][N],k;
struct E{
    int v,next;
}e[N];
void add(int u,int v){
    e[++tot].v=v;
    e[tot].next=head[u];
    head[u]=tot;
}
void dfs(int x){
    d[x]=1;
    for(int i=head[x];i;i=e[i].next){
        dfs(e[i].v);
        d[x]+=d[e[i].v];
    }
}
/*int solve(int x,int y){
    if(y==0)return 0;
    if(y==1)return a[x];
    if(vis[x][y])return f[x][y];
    int u1=e[head[x]].v,u2=e[e[head[x]].next].v;
//    cout<<x<<‘ ‘<<u1<<‘ ‘<<u2<<endl;
    if(u1==0&&u2==0){
    f[x][y]=a[x];
    vis[x][y]=1;
     return f[x][y];
    }
    if(u1==0){
     f[x][y]=solve(u2,y-1)+a[x];
        vis[x][y]=1;
        return f[x][y];
    }
    if(u2==0){
        f[x][y]=solve(u1,y-1)+a[x];
        vis[x][y]=1;
        return f[x][y];
    }

    //f[x][y]=max(solve(u1,y-1),solve(u2,y-1)); 
     for(int i=0;i<y;i++)
     if(i<=d[u1]&&y-1-i<=d[u2]){
      f[x][y]=max(f[x][y],solve(u1,i)+solve(u2,y-1-i));}
      f[x][y]+=a[x];
       vis[x][y]=1;
      // cout<<x<<‘ ‘<<y<<f[x][y]<<endl;
      return f[x][y];
 
}*/ 
void dp(int x){
    if(x!=1) f[x][1]=a[x];
    else f[x][0]=0;
    for(int i=head[x];i;i=e[i].next){
        int v=e[i].v;
        dp(v);
        for(int i=k;i>=1;i--)
          for(int j=1;j<=k;j++)
            if(i-j<0) break;
            else f[x][i]=max(f[x][i],f[x][i-j]+f[v][j]);
    }
    return;
}

int main(){
    int n;
    cin>>n>>k;
    for(int i=1;i<=n;i++)
     for(int j=0;j<=k;j++)f[i][j]=-1e9;//必须得初始化 
    for(int i=2;i<=n;i++)cin>>a[i];
    for(int i=1;i<=n;i++){
        int x,y;
        cin>>x>>y;
        if(x)add(i,x);
        if(y)add(i,y);
    }
    dp(1);
    cout<<f[1][k];
/*    for(int i=1;i<=n;i++)
     for(int  j=0;j<=min(k+1,d[i]);j++)
      cout<<i<<‘ ‘<<j<<‘ ‘<<f[i][j]<<endl;*/
}

 

将坐标转化为数

https://www.cnblogs.com/moyujiang/p/11167794.html

https://blog.csdn.net/ebirth/article/details/90728623

https://blog.csdn.net/hwzzyr/article/details/71083404

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int fa[N],n,m;
int convert(int x,int y)
{
    return x*m+y-m;
}
void init()
{
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            int con=convert(i,j);
            fa[con]=con;    
    }
}
int get(int x)
{   
    while(x!=fa[x])x=fa[x]=fa[fa[x]];
    return x;
}
bool merge(int x,int y)
{
    int r1=get(x);
    int r2=get(y);
    if(r1==r2)return 0;
    else fa[r1]=r2;
    return 1;
}
int main()
{
    cin>>n>>m;
    init();
    int a,b,c,d,ans=0;
    while(cin>>a>>b>>c>>d){
    int flag=merge(convert(a,b),convert(c,d));
    }
    for(int j=1;j<=m;j++)
        for(int i=1;i+1<=n;i++)
            if(merge(convert(i,j),convert(i+1,j)))ans++;
    for(int i=1;i<=n;i++)
        for(int j=1;j+1<=m;j++)
            if(merge(convert(i,j),convert(i,j+1)))ans+=2;
    cout<<ans<<endl;
    return 0;
}

 

关了同步流 不用scanf还是t

pair用法 以及auto &引用?

以及颜色循环的问题

链式前向星连图tot从1开始 这样id>>1就是对应边的序号的 跟tarjan边双的时候类似

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
vector<pair<int,int> >g[N];
int ans[N],tot,vis[N];
void dfs(int x,int pre){
    vis[x]=1;
//    if(x==1)tot=max(tot,(int)g[x].size());
//     else tot=max(tot,(int)g[x].size());
    int cur=0;
    for(auto& u:g[x]){
        int v=u.first,id=u.second;
        if(vis[v])continue;
        ++cur;
        if(cur==pre)cur++;
        ans[id]=cur;
        dfs(v,cur);
    }
}
int main(){
    int n;
//    ios::sync_with_stdio(false);cin.tie(0);
    scanf("%d",&n);
    for(int i=1;i<n;i++){
        int x,y;
    //    cin>>x>>y;
        scanf("%d%d",&x,&y);
    //    g[x].push_back({y,i});
    //    g[y].push_back({x,i});    
        g[x].push_back(make_pair(y,i));
        g[y].push_back(make_pair(x,i));
    }
    for(int i=1;i<=n;i++)tot=max(tot,(int)g[i].size());
    dfs(1,0);
    printf("%d\n",tot);
    for(int i=1;i<n;i++)printf("%d\n",ans[i]);
}

https://blog.csdn.net/qq_43408238/article/details/103230117

 

#include<bits/stdc++.h>
using namespace std;

int main(){
    string s;
    cin>>s;
    if(s=="SUN")cout<<7;
     else if(s=="MON")cout<<6<<endl; 
      else if(s=="TUE")cout<<5<<endl;
       else if(s=="WED")cout<<4<<endl;
        else if(s=="THU")cout<<3<<endl;
         else if(s=="FRI")cout<<2<<endl;
          else cout<<1<<endl;
}

 

#include<bits/stdc++.h>
using namespace std;
const int N=1e4+5;
char s[N];
map<char,char>mp;
int main(){
    int n;
    cin>>n;
    cin>>s;
    for(char i=A;i<=Z;i++)mp[i]=(i-65+n)%26+65;
    int l=strlen(s);
    for(int i=0;i<l;i++)putchar(mp[s[i]]);
    return 0;
}

 

可以二分?

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main(){
    ll a,b,x,ans=0;
    cin>>a>>b>>x;
   if(a*pow(10,9)+10*b<=x){
       cout<<(int)pow(10,9);return 0;
   }
    for(int i=9;i;i--){
        if(x-i*b>0&&(x-i*b)/a>=pow(10,i-1)) {
        if(a*(pow(10,i)-1)+i*b<=x)ans=pow(10,i)-1;
         else ans=(x-i*b)/a;//%a
        cout<<ans<<endl;
        return 0;     
    }
    }
    cout<<0<<endl; 
}

 

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+5;

struct P{
    int x,y;
}a[N];
int main(){
    int n;
    cin>>n;
    int ans=0;
    for(int i=1;i<=n;i++)cin>>a[i].x>>a[i].y;
    for(int i=1;i<=n;i++){
        int r=0,flag=0;
        for(int j=1;j<=n;j++){
            if(i==j)continue;
            if(!r)r=(a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y);
             else if((a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y)!=r){
            flag=1;
             break;}
        }
        if(!flag){ans=i;break;}//没判flag 
    }
    cout<<ans<<endl;
}

 

3.16

标签:rem   while   namespace   ios   art   sdn   const   relevant   style   

原文地址:https://www.cnblogs.com/wyh447154317/p/12513219.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!